Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Crear ComboBox y TextBox desde VB6.0

Estas en el tema de Crear ComboBox y TextBox desde VB6.0 en el foro de Visual Basic clásico en Foros del Web. Hola compañeros! Hace tiempo que no pasaba por el foro debido a que estoy con otro soft pero ahora me encuentro con una duda y ...
  #1 (permalink)  
Antiguo 04/10/2011, 02:34
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Crear ComboBox y TextBox desde VB6.0

Hola compañeros!

Hace tiempo que no pasaba por el foro debido a que estoy con otro soft pero ahora me encuentro con una duda y quisiera si alguien puede ayudarme.
Necesito hacer una macro donde pueda activando un botón abrir un TextBox y un ComboBox nuevo y naturalmente que el formulario se ajuste a la nueva linea. La idea es que en un formulario se visualicen varias filas iniciales y en cada fila habra un ComboBox y un textBox con un boton que hace que si no hay suficientes filas para introducir parejas de datos se habra automaticamente esta nueva fila. ¿Esto es posible? ¿Como me lo monto, que codigo, parametro o propiedad hace que se habra un nuevo ComboBox, textBox, etc.?

Un saludo y 1000 gracias por adelantado.

Aqui os envio dos pantallazos del macro.


Este es antes de presionar el boton lila.


Y este cuando solicitas una linea mas.(Boton lila presionado "NUEVA FILA").
  #2 (permalink)  
Antiguo 04/10/2011, 11:37
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 6 meses
Puntos: 47
Respuesta: Crear ComboBox y TextBox desde VB6.0

Hola!
Aquí tienes un ejemplo de como hacerlo:

• Agrega un Textbox con indice en cero (txt)
• Agrega un Label con indice en cero (lbl)
• Agrega un Command (cmd)

Código vb:
Ver original
  1. Private Sub cmd_Click()
  2.     Dim IND As Integer
  3.    
  4. 'PARA EL LABEL
  5.    IND = lbl.UBound + 1
  6.    
  7.     Load lbl(IND)
  8.    
  9.     lbl(IND).Left = 120
  10.     lbl(IND).Top = lbl(IND - 1).Top + lbl(IND - 1).Height + 45
  11.     lbl(IND).Width = lbl(IND).Width
  12.     lbl(IND).Caption = "Indice: " & IND
  13.     lbl(IND).Visible = True
  14.    
  15. 'PARA EL TEXTBOX
  16.    IND = txt.UBound + 1
  17.    
  18.     Load txt(IND)
  19.    
  20.     txt(IND).Left = 2160
  21.     txt(IND).Top = txt(IND - 1).Top + txt(IND - 1).Height + 45
  22.     txt(IND).Width = txt(IND).Width
  23.     txt(IND).Text = "Indice: " & IND
  24.     txt(IND).Visible = True
  25.    
  26. 'PARA EL COMMAND
  27.    cmd.Top = txt(IND).Top + txt(IND).Height + 45
  28.    
  29. 'PARA LA FORMA
  30.    If Me.WindowState = 0 Then If cmd.Top >= 2580 Then Me.Height = Me.Height + cmd.Height
  31. End Sub

Nos cuentas!!
  #3 (permalink)  
Antiguo 05/10/2011, 02:49
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Crear ComboBox y TextBox desde VB6.0

Hola lokoman!

Perfecto esto es lo que queria hacer pero tengo un par de consultas .:

1ª ¿Que hace la parte de "FORMA"? ya que no veo cambio alguno en el formulario y hace referencia al boton que ya tiene un desplazamiento en el apartado 'PARA EL COMMAND.

2ª ¿Hay alguna manera de no utilizar el Indice = 0? me explico, resulta que quiero hacer este macro pero para VBA CATIA, que utiliza un VB practicamente igual al VB 6.0, pero no tiene la propiedad de "Indice" en sus controles o no he sabido encontrarla.

3ª Veo que utilizas el comando "Load" para agregar comandos supongo que para lo inverso es exactamente igual pero con "Unload" y en vez de aumentar el Top se reduce naturalmente.

4ª ¿este metodo es valido para todo tipo de controles o es limitado solo para algunos?.

5º Y ultima, tanto si se utiliza el metodo con Indice=0 o si hubiese uno sin utilizar el Indice=0, ¿Como o que deben tener el resto de controles del formulario que no deban ser duplicados, o solo con el nombre personalizado y sin posible relación alguna a estos es suficiente para que no les afecte?


Muchas gracias un saludote

Última edición por XYON126; 05/10/2011 a las 02:55
  #4 (permalink)  
Antiguo 05/10/2011, 08:15
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 6 meses
Puntos: 47
Respuesta: Crear ComboBox y TextBox desde VB6.0

1-El apartado "FORMA" hace lo que pediste: "el formulario se ajuste a la nueva linea", o sea, al añadir un nuevo TEXTBOX, LABEL, etc. el formulario AUMENTA su tamaño, pero esto solo pasa si los controles llegan a la parte inferior del formulario

2-El indice=0 es porque los controles que se cargan pertenecen a un ARREGLO, por eso la instruccion LOAD. Hay otra forma:

http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx

Código vb:
Ver original
  1. ' Visual Basic 6.0
  2. Private Sub Command1_Click()
  3.     ' Declare a new Control variable.
  4.    Dim c As Control
  5.     ' Create and add the new control.
  6.    Set c = Controls.Add("VB.TextBox", "Text1")
  7.     ' Make the new control visible.
  8.    c.Visible = True
  9.     ' Set the initial text.
  10.    c.Text = "Hello"
  11.     ' Retrieve the text from the new TextBox.
  12.    If Controls.Count > 1 Then
  13.         MsgBox (Controls("Text1").Text)
  14.     End If
  15.     ' Remove the new control.
  16.    Controls.Remove (Text1)
  17.     ' The following line causes a compilation error.
  18.    ' You cannot remove controls added at design time.
  19.    Controls.Remove (Command1)
  20. End Sub

3-El UNLOAD es para descargar objetos, el TOP no se reduce automáticamente, cuando uso el LOAD el TOP lo calculo para que no queden los controles unos sobre otros, el UNLOAD solo quita el objeto que le dices, si quitas el TEXTBOX numero 3, el TEXTBOX numero 4 (que esta abajo), no va a subir, hay que calcularle el TOP

4-Es valido para todos los controles de VB, si son un arreglo (indice=0)

5-Con el codigo de ejemplo del punto numero 2, puedes cargar cualquier objeto, solo debes ponerle un nombre diferente a cada uno
  #5 (permalink)  
Antiguo 05/10/2011, 09:01
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Crear ComboBox y TextBox desde VB6.0

Hola lokoman!

Entonces, si no he entendido mal, esta nueva opción seria crear tantas colecciones como controles quiera duplicar, por ejemplo:

Código vb:
Ver original
  1. Dim txt, lbl As Control
  2.  
  3. Set txt = Controls.Add("VB.TextBox", "Text1")
  4.  
  5. Set lbl = Controls.Add("VB.Label", "Label1")

¿y para poder controlar e identificar cada control, estos los deberia de tener tambien en otra matriz o como/que deberia hacer para poderles situar e identificar?.

Un saludo

PDTA: Por cierto el otro metodo lo he realizado y para VB6.0 me queda de coña pero no me funciona en VBA CATIA. Por si a alguien le interesa aqui posteo el codigo con TextBox y Label dinamicos y un boton para duplicar y otro para borrar.

Código vb:
Ver original
  1. Private Sub Form_Load()
  2.  
  3.     IND = lbl.UBound
  4.      
  5.     If IND = 0 Then cmd_BorrarLinea.Enabled = False
  6.    
  7. End Sub
  8. Private Sub cmd_BorrarLinea_Click()
  9.     'Dim IND As Integer
  10.      
  11.     'PARA EL LABEL
  12.        IND = lbl.UBound
  13.              
  14.         Unload lbl(IND)
  15.        
  16.                
  17.     'PARA EL TEXTBOX
  18.        IND = txt.UBound
  19.        
  20.         Unload txt(IND)
  21.        
  22.     'PARA EL COMMAND
  23.        cmd_NuevaLinea.Top = txt(IND - 1).Top - 45
  24.         cmd_BorrarLinea.Top = txt(IND - 1).Top - 45 'txt(IND).Height - 45
  25.      
  26.     'PARA LA FORMA
  27.        
  28.         Me.Height = Me.Height - cmd_NuevaLinea.Height
  29.         If IND = 1 Then cmd_BorrarLinea.Enabled = False
  30. End Sub
  31.  
  32.     Private Sub cmd_NuevaLinea_Click()
  33.         'Dim IND As Integer
  34.       cmd_BorrarLinea.Enabled = True
  35.     'PARA EL LABEL
  36.        IND = lbl.UBound + 1
  37.        
  38.         Load lbl(IND)
  39.        
  40.         lbl(IND).Left = 240
  41.         lbl(IND).Top = lbl(IND - 1).Top + lbl(IND - 1).Height + 45
  42.         lbl(IND).Width = lbl(IND).Width
  43.         lbl(IND).Caption = "Indice: " & IND
  44.         lbl(IND).Visible = True
  45.        
  46.     'PARA EL TEXTBOX
  47.        IND = txt.UBound + 1
  48.        
  49.         Load txt(IND)
  50.        
  51.         txt(IND).Left = 3480
  52.         txt(IND).Top = txt(IND - 1).Top + txt(IND - 1).Height + 45
  53.         txt(IND).Width = txt(IND).Width
  54.         txt(IND).Text = "Indice: " & IND
  55.         txt(IND).Visible = True
  56.        
  57.     'PARA EL COMMAND
  58.        cmd_NuevaLinea.Top = txt(IND).Top + 45
  59.         cmd_BorrarLinea.Top = txt(IND).Top + 45 'txt(IND).Height + 45
  60.        
  61.     'PARA LA FORMA
  62.        
  63.         Me.Height = Me.Height + cmd_NuevaLinea.Height
  64.        
  65.     End Sub


Última edición por XYON126; 05/10/2011 a las 09:09
  #6 (permalink)  
Antiguo 05/10/2011, 11:00
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 6 meses
Puntos: 47
Respuesta: Crear ComboBox y TextBox desde VB6.0

Con este codigo le puedes asignar los eventos:

Código vb:
Ver original
  1. Option Explicit
  2. Dim WithEvents txtTexto As VB.TextBox
  3.  
  4. Private Sub cmd_Click()
  5.     Set txtTexto = Controls.Add("VB.TextBox", "Text1")
  6.     txtTexto.Visible = True
  7. End Sub
  8.  
  9. Private Sub txtTexto_Click()
  10.     MsgBox "Tengo el foco!!"
  11. End Sub

Etiquetas: combobox, textbox, 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 19:08.