Foros del Web » Programación para mayores de 30 ;) » .NET »

Macrosustitucion en Visual Basic 2010

Estas en el tema de Macrosustitucion en Visual Basic 2010 en el foro de .NET en Foros del Web. Buenos días. Necesito realizar Macrosustitucion en Visual Basic 2010, para realizar ciclos iteractivos con n variables. Gracias por su tiempo....
  #1 (permalink)  
Antiguo 07/07/2011, 07:39
 
Fecha de Ingreso: noviembre-2005
Ubicación: Caracas, Venezuela
Mensajes: 8
Antigüedad: 19 años
Puntos: 0
Macrosustitucion en Visual Basic 2010

Buenos días.

Necesito realizar Macrosustitucion en Visual Basic 2010, para realizar ciclos iteractivos con n variables.
Gracias por su tiempo.
  #2 (permalink)  
Antiguo 07/07/2011, 07:58
Avatar de AnibalDiaz  
Fecha de Ingreso: junio-2011
Mensajes: 65
Antigüedad: 13 años, 5 meses
Puntos: 5
Respuesta: Macrosustitucion en Visual Basic 2010

¿Macrosustitucion?

Prueba con CRTL + F ...
  #3 (permalink)  
Antiguo 07/07/2011, 08:49
Avatar de HaverRamirez  
Fecha de Ingreso: junio-2011
Ubicación: Guatemala
Mensajes: 273
Antigüedad: 13 años, 4 meses
Puntos: 33
Respuesta: Macrosustitucion en Visual Basic 2010

Umm no entiendo...explicate mas
  #4 (permalink)  
Antiguo 07/07/2011, 09:59
 
Fecha de Ingreso: noviembre-2005
Ubicación: Caracas, Venezuela
Mensajes: 8
Antigüedad: 19 años
Puntos: 0
Respuesta: Macrosustitucion en Visual Basic 2010

Buenos dias.
La Macrosustitucion es para realizar ciclos iteractivos con n variables dentro de la ejecucion del programa.
Ejemplo:
tengo 15 textbox que si tienen datos realizo la misma operacion.
Puedo validar cada uno de ellos y realizar la misma operacion, pero si puedo utilizar la macrosustitucion como se hacia en foxpro, me ahorraria unas cuantas lineas de codigo:
Seria algo asi como:

For i=0 To 15
txtTexto = "textbox" & i
if txtTexto.Text <> "" Then
function Operacion(txtTexto.Text)
End If
Next

Cómo haria esto?

Gracias por su tiempo.
  #5 (permalink)  
Antiguo 07/07/2011, 10:08
Avatar de HaverRamirez  
Fecha de Ingreso: junio-2011
Ubicación: Guatemala
Mensajes: 273
Antigüedad: 13 años, 4 meses
Puntos: 33
Respuesta: Macrosustitucion en Visual Basic 2010

Eso es Recursión
dentro de basic se usa procedimientos para recorrer los datos, por ejemplo

Código vb:
Ver original
  1. Public Function RecorreValida(ByVal G As GroupBox) As Boolean
  2.         Try
  3.             For Each C As Control In G.Controls
  4.  
  5.                
  6.                 If TypeOf C Is Combobox Then
  7. 'el tipo isvalidselection es parte del objeto personalisado regresa true o false
  8.                    If CType(C, Combobox).IsValidSelection = False Then
  9. 'vincula error es un proc donde se adhiere un error provider y se despliegan mensajes
  10.                        VinculaError(C)
  11.                         Return False
  12.                     End If
  13.                 End If
  14.                 If TypeOf C Is TextBox Then
  15.                     If String.IsNullOrEmpty(CType(C, CONACC.TextBoxAlfanumerico).Text) Then
  16.                         VinculaError(C)
  17.                         Return False
  18.                     End If
  19.                 End If
  20.                 'aqui vuelvo a llamar la misma funcion, o sea esta, pero le mando el groupbox y asi sucesivamente
  21.  
  22.                 if typeof c is groupbox then
  23.                 recorreValida(c)
  24.                 end if
  25.                
  26.             Next
  27.             Return True
  28.         Catch ex As Exception
  29.             MsgBox(ex.Message)
  30.         End Try
  31.     End Function
  #6 (permalink)  
Antiguo 07/07/2011, 11:57
 
Fecha de Ingreso: noviembre-2005
Ubicación: Caracas, Venezuela
Mensajes: 8
Antigüedad: 19 años
Puntos: 0
Respuesta: Macrosustitucion en Visual Basic 2010

Muy bueno lo que me escribes, pero, cómo paso los valores de los textbox a otra funcion, que es la misma para todos los textbox?
  #7 (permalink)  
Antiguo 07/07/2011, 12:00
Avatar de HaverRamirez  
Fecha de Ingreso: junio-2011
Ubicación: Guatemala
Mensajes: 273
Antigüedad: 13 años, 4 meses
Puntos: 33
Respuesta: Macrosustitucion en Visual Basic 2010

Envias el textbox completo, si te das cuenta yo utilizo un for each definiendo la variable C as Control, un textbox es un Control, entonces C es un control del tipo textbox con todo y sus propiedades, fijate en el procedimiento anterior , y ves cuando hago un Ctype(c,textbox).text estoy accesando al control, y le digo con Ctype que lo interprete como un textbox y si se puede interpretar, puedo acceder a su propiedad Text, en el caso de string.isnullorEmpty verifico si el text del control (textbox) esta vacio si es asi, envio el objeto completo a un procedimiento vinculaerror(c) donde vincula error espera un parametro tipo control y ahi lo valido, mira el proc de validación
Código vb:
Ver original
  1. Public Function VinculaError(ByVal C As Control)
  2.         errprovider = New ErrorProvider
  3.         errprovider.SetError(C, "Campo Requerido")
  4.         errprovider.BlinkRate = 1000
  5.     End Function

Date cuenta de otra cosa primero verifico o trato de ver si es un tipo de control con TypeOf y lo comparo si es un combobox que haga un tipo de verificacion y si es un tipo textbox que verifique la propieda text, ahora con datetimepicker seria asi

Código vb:
Ver original
  1. If TypeOf C Is DatetimePicker Then
  2.                     If IsNothing(CType(C, DatetimePicker).Value) OrElse Not IsDate(CType(C, DatetimePicker).Value) Then
  3.                         VinculaError(C)
  4.                         Return False
  5.                     End If
  6.                 End If
  #8 (permalink)  
Antiguo 07/07/2011, 12:07
 
Fecha de Ingreso: noviembre-2005
Ubicación: Caracas, Venezuela
Mensajes: 8
Antigüedad: 19 años
Puntos: 0
Respuesta: Macrosustitucion en Visual Basic 2010

Ahora lo veo mas claro, pero otra pregunta, en la instruccion CType(C, CONACC.TextBoxAlfanumerico).Text), quien es CONACC.TextBoxAlfanumerico)?

Gracias por tu tiempo.
  #9 (permalink)  
Antiguo 07/07/2011, 12:12
Avatar de HaverRamirez  
Fecha de Ingreso: junio-2011
Ubicación: Guatemala
Mensajes: 273
Antigüedad: 13 años, 4 meses
Puntos: 33
Respuesta: Macrosustitucion en Visual Basic 2010

Ahh, es como lo dije en un principio yo tengo creados objetos personalizados o sea cree un dll con herencia del textbox de microsoft y extendi sus propiedades , por eso tengo que compararlo con el tipo de mi dll y no con un textbox de microsoft, que al final de cuentas es de microsoft pero extendi sus propiedades y cree otras, como en el combobox que te dije, hice una clase que hereda de combobox y adicione un procedimiento que se llama isvalidseleccion donde comparo y devulevo un valor, despues hice una referencia en el proyecto a mi dll y en las herramientas cree una nueva pestaña, e importe la dll, y me detecto cada control, asi lo jalo al form.
checate la clase del combobox, es un clase, despues genero el proyecto y genera la dll

Código vb:
Ver original
  1. Imports System.Runtime.InteropServices
  2.  
  3. Public Class ComboBoxIncremental
  4.     'la herencia del combobox normal
  5.     Inherits System.Windows.Forms.ComboBox
  6.     'agrego un nuevo evento
  7.    Friend WithEvents ErrorP As System.Windows.Forms.ErrorProvider
  8.     'campos accesibles
  9.     Private VarRequerido As Boolean
  10.     Public VarDespliega As Boolean
  11.     Public VarCambiar As Boolean = True
  12.  
  13.     Enum Evento
  14.         Entrar
  15.         Salir
  16.         Habilitar
  17.     End Enum
  18.  
  19.  
  20.  
  21.     Protected Overrides Sub RefreshItem(ByVal index As Integer)
  22.         MyBase.RefreshItem(index)
  23.     End Sub
  24.  
  25.     Protected Overrides Sub SetItemsCore(ByVal items As System.Collections.IList)
  26.         MyBase.SetItemsCore(items)
  27.     End Sub
  28.  
  29.     Private Sub InitializeComponent()
  30.         Me.ErrorP = New System.Windows.Forms.ErrorProvider
  31.     End Sub
  32.  
  33.     Public Sub New()
  34.         MyBase.New()
  35.         InitializeComponent()
  36.         VarRequerido = False
  37.         VarDespliega = True
  38.         Me.Text = ""
  39.     End Sub
  40.  
  41.     Public Sub Iniciar(Optional ByVal ParRequerido As Boolean = False, Optional ByVal ParDespliega As Boolean = True)
  42.         Try
  43.             VarRequerido = ParRequerido
  44.             VarDespliega = ParDespliega
  45.             If Me.DropDownStyle = Windows.Forms.ComboBoxStyle.DropDownList Then
  46.                 If Me.Items.Count > 0 Then
  47.                     Me.SelectedIndex = 0
  48.                 End If
  49.             Else
  50.                 If Me.Items.Count > 0 Then
  51.                     Me.SelectedIndex = 0
  52.                 End If
  53.             End If
  54.         Catch ex As Exception
  55.             MsgBox("Error en Iniciar de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  56.         End Try
  57.     End Sub
  58.  
  59.     Public Function Valido() As Boolean
  60.         Try
  61.             If VarRequerido Then
  62.                 If Me.Text = String.Empty Then
  63.                     ErrorP.SetError(Me, "Campo requerido, ingrese un valor")
  64.                     Return False
  65.                 Else
  66.                     ErrorP.SetError(Me, "")
  67.                     Return True
  68.                 End If
  69.             Else
  70.                 ErrorP.SetError(Me, "")
  71.                 Return True
  72.             End If
  73.         Catch ex As Exception
  74.             MsgBox("Error en Valido de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  75.         End Try
  76.     End Function
  77.  
  78.     Public Sub CargarDatos(ByVal ParOrigenDatos As DataTable, ByVal ParLlave As String, ByVal ParTexto As String, Optional ByVal ParDesplegar As String = "")
  79.         Try
  80.             Dim Aux As New Seguridad
  81.             If ParLlave = "IDEmpresa" Then
  82.                 If Not Aux.VerificarAcceso() Then Exit Sub
  83.             End If
  84.  
  85.             Dim Fila As DataRow
  86.             Fila = ParOrigenDatos.NewRow
  87.             If Fila(ParLlave).GetType.Name = "String" Then
  88.                 Fila(ParLlave) = ""
  89.             Else
  90.                 Fila(ParLlave) = 0
  91.             End If
  92.             Fila(ParTexto) = ParDesplegar
  93.             ParOrigenDatos.Rows.InsertAt(Fila, 0)
  94.             Me.DataSource = ParOrigenDatos
  95.             Me.DisplayMember = ParTexto
  96.             Me.ValueMember = ParLlave
  97.             Me.SelectedIndex = 0
  98.             Me.AutoCompleteMode = Windows.Forms.AutoCompleteMode.Append
  99.             Me.AutoCompleteSource = Windows.Forms.AutoCompleteSource.ListItems
  100.         Catch ex As Exception
  101.             MsgBox("Error en CargarDatos de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  102.         End Try
  103.     End Sub
  104.  
  105.     Private Sub Seleccionar(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus, MyBase.Click, MyBase.Enter
  106.         Try
  107.             CambiarEstilo(Evento.Entrar)
  108.             Me.DroppedDown = VarDespliega
  109.         Catch ex As Exception
  110.             MsgBox("Error en Seleccionar de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  111.         End Try
  112.     End Sub
  113.  
  114.     Private Sub ComboBox_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Leave
  115.         Try
  116.  
  117.             CambiarEstilo(Evento.Salir)
  118.             If VarCambiar Then
  119.                 If Not VarDespliega Then
  120.                     VarDespliega = True
  121.                 End If
  122.             End If
  123.          
  124.         Catch ex As Exception
  125.             MsgBox("Error en ComboBox_Leave de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  126.         End Try
  127.     End Sub
  128.  
  129.     Private Sub ComboBoxIncremental_EnabledChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.EnabledChanged
  130.         Try
  131.             CambiarEstilo(Evento.Habilitar)
  132.         Catch ex As Exception
  133.             MsgBox("Error en ComboBoxIncremental_EnabledChanged de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  134.         End Try
  135.     End Sub
  136.  
  137.     Private Sub CambiarEstilo(ByVal ParEvento As Evento)
  138.         Try
  139.             Select Case ParEvento
  140.                 Case Evento.Entrar
  141.                     Me.BackColor = Drawing.Color.LightYellow
  142.                 Case Evento.Salir
  143.                     Me.BackColor = Drawing.Color.FromName("Window")
  144.                 Case Evento.Habilitar
  145.                     Me.BackColor = IIf(Me.Enabled, Drawing.Color.FromName("Window"), Drawing.Color.White)
  146.                     Me.ForeColor = IIf(Me.Enabled, Drawing.Color.FromName("WindowText"), Drawing.Color.Black)
  147.             End Select
  148.         Catch ex As Exception
  149.             MsgBox("Error en CambiarEstilo de ComboBoxIncremental: " + ex.Message, MsgBoxStyle.Critical)
  150.         End Try
  151.     End Sub
  152.  
  153.     Public Function IsValidSelection() As Boolean
  154.         If Not IsNothing(Me.SelectedValue) AndAlso Me.SelectedIndex > 0 Then
  155.             Return True
  156.         Else
  157.             Return False
  158.         End If
  159.     End Function

En si no deberias de haber visto el conacc.textboxalfanumerico, pero se me olvido corregir tambien este, porque la validacion del tipo typeof del combo en mi codigo en realidad es asi
Código vb:
Ver original
  1. If TypeOf C Is CONACC.ComboBoxIncremental Then
  2.                     If CType(C, CONACC.ComboBoxIncremental).IsValidSelection = False Then
  3.                         VinculaError(C)
  4.                         Return False
  5.                     End If
  6.                 End If

pero se me paso hacerlo con el textbox, ups, pero espero te sirva. y si te das cuenta hay una redundancia entre las cosas que se hacen, que justamente ahora me di cuenta, el combobox que anteriormente puse el codigo, tiene una funcion que se llama Valido, y yo cree un proc que anteriomente tambien puse para validarlo, que es el for each etc etc, esto es porque este codigo no lo cree yo todo, o sea, lo eh estado modificando, pero su creador ya creo estas propiedades, ojo me acabo de dar cuenta, jajaja, changos.
  #10 (permalink)  
Antiguo 07/07/2011, 12:59
 
Fecha de Ingreso: noviembre-2005
Ubicación: Caracas, Venezuela
Mensajes: 8
Antigüedad: 19 años
Puntos: 0
Respuesta: Macrosustitucion en Visual Basic 2010

Increible el procedimiento que me escribes.
Me sirve para pasar el valor de un textbox a otro procedimiento.
Ahora, necesito pasar varios textbox a otro procedimiento, dependiendo si un textbox tiene datos o no.
Me explico. Tengo una factura con varios renglones, 10 en total.
Los textbox de cada renglon son:
Renglon 1: txtCantidad1, txtDescripcion1, txtTotalRenglon1
Renglon 2: txtCantidad2, txtDescripcion2, txtTotalRenglon2
Renglon 3: txtCantidad3, txtDescripcion3, txtTotalRenglon3
y asi sucesivamente.

Como hago para, con este procedimeinto, pasar los 3 valores de cada renglon al otro procedimiento?
  #11 (permalink)  
Antiguo 07/07/2011, 13:46
Avatar de HaverRamirez  
Fecha de Ingreso: junio-2011
Ubicación: Guatemala
Mensajes: 273
Antigüedad: 13 años, 4 meses
Puntos: 33
Respuesta: Macrosustitucion en Visual Basic 2010

Bueno, aqui ya nos metemos a los arreglos, en programación orientada a objetos, no se como estes llevando tu aplicación, asi que te dare la forma sencilla de hacerlo, tu procedimiento puede esperar un tipo DataTable, y lo que haces es al Datatable agregarle columnas y filas dependiendo si los textbox tienen valores, algo asi

Código vb:
Ver original
  1. Public Function CreaEstructuraTabla() As DataTable
  2.         Try
  3.             Dim table As New DataTable
  4.             Dim column As DataColumn = New DataColumn
  5.             column.DataType = System.Type.GetType("System.String")
  6.             column.AllowDBNull = False
  7.             column.Caption = "Tipo"
  8.             column.ColumnName = "Tipo"
  9.             table.Columns.Add(column)
  10.             Return table
  11.         Catch ex As Exception
  12.             MsgBox(ex.Message)
  13.         End Try
  14.     End Function

ahora solo creas las filas y le agregas valores

Código vb:
Ver original
  1. Dim dt As New DataTable
  2.             dt = CreaEstructuraTabla()
  3.             Dim rw As DataRow
  4.             rw = dt.NewRow
  5.             rw("Tipo") = "Venta"
  6.             dt.Rows.Add(rw)
  7.             rw = dt.NewRow
  8.             rw("Tipo") = "Devolución"
  9.             dt.Rows.Add(rw)

y en tu procedimiento que espera estos valores le pones

Código vb:
Ver original
  1. sub function OperaFactura(byval dt as datatable)
  2. dim fila as string
  3. for each dt as datarow in dt.rows
  4. fila = dt("Tipo")
  5. next
  6. end function

es un ejemplo tendras que darle forma, ahora tambien puede crear arreglos, esta parte es mas complicada, pero mucho mas escalable o sea mas facil de modificar despues, y tambien puedes pasar tipos arralist pero eso depende de que estes haciendo, como estas con tu aplicación, cual es tu mira, ya tienes codigo y lo estas modificando, estas empezando etc.
  #12 (permalink)  
Antiguo 07/07/2011, 14:09
 
Fecha de Ingreso: noviembre-2005
Ubicación: Caracas, Venezuela
Mensajes: 8
Antigüedad: 19 años
Puntos: 0
Respuesta: Macrosustitucion en Visual Basic 2010

Gracias por la ayuda.
Ahora solo me queda darle forma segun los requerimientos de mi aplicacion.
Caulquier duda, nos vemos por aqui.

De nuevo, gracias por tu tiempo y colaboración.

Etiquetas: basic, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:43.