| 
	
		|  Autor | Tema: Cómo seleccionar elemento ComboBox por índice  (Leído 68,904 veces) |  
	| 
			| 
					
						| raul338 
								       
								
								 Desconectado 
								Mensajes: 2.633
								
								 
								La sonrisa es la mejor forma de afrontar las cosas
								
								
								
								
								
								     | 
 
novalida, el itemdata es un espacio extra (como una variable mas), pongas lo que le pongas, no afecta en nada en absoluto al ComboBox. Ya sabes que los indices empiezan de 0, lo que puedes hacer es que el item que quieres seleccionar, le restes uno. ej ComboBox1.ListIndex = Abs(Val(Text1.Text)) - 1
 No te preocupes del -1, en caso de que el text este vacio (o no tenga numeros) el resultado es -1, lo que significa que ningun item se seleccionara (estara vacio, bueno, eso depende del estilo del combo) Si quieres seleccionar enero poniendo 1, seleccionara el 0. Esto funciona a menos que el combobox este ordenado y el orden afecte el orden de los indices. Para estos casos no queda otra que hace ComboBox1.Text = "Enero" y que windows se encarge de buscarlo  
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| novalida 
								
								 Desconectado 
								Mensajes: 160
								
								
								
								
								
								   | 
 
raul338 , sí, tienes razón, esa sería la respuesta más lógica, pero lo que pretendía era no hacer referencia a la propiedad .Text, pues no queda muy elegante para asegurar la integridad al trabajar con una base de datos, cayendo fácilmente en la creación de una aplicación hard code.
 
 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| BlackZeroX 
								Wiki  Desconectado 
								Mensajes: 3.158
								
								 
								I'Love...!¡.
								
								
								
								
								
								     | 
 
. Cada item del Combo al indicarle el indice 1, 2 etc, no implica que sea su identificador solo le dice al objeto que quieres que el nuevo item sea ese indice Todos los demas "items" solo son recorridos. Aquí un pequeño ejemplo que arme. ' // Se Requieren Dos controles ComboBox llamados' // cmb_calendarioEspejo' // cmb_calendario' // Ejemplo por BlackZeroX. Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)Private Declare Function VarArrPtr Lib "msvbvm60" Alias "VarPtr" (arr() As Any) As Long Private Sub cmb_calendario_Click()Dim lng_iNow                As Long    lng_iNow = cmb_calendario.ListIndex    Caption = lng_iNow    If cmb_calendarioEspejo.ListCount - 1 >= lng_iNow Then        cmb_calendarioEspejo.ListIndex = lng_iNow    End IfEnd Sub Private Sub Form_Load()Dim Meses()                 As Variant    Meses = Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agisto", "Septiembre", "Octubre", "Noviembre", "Diciembre")    Debug.Print FillObjectWithArray(cmb_calendario, Meses)    Debug.Print FillObjectWithArray(cmb_calendarioEspejo, Meses)     '   //  Pruebas Index...    Call cmb_calendario.AddItem("caca5", 1)    Call cmb_calendario.AddItem("caca4", 1)    Call cmb_calendario.AddItem("caca3", 1)    Call cmb_calendario.AddItem("caca2", 1)    Call cmb_calendario.AddItem("caca1", 1)End Sub Private Function FillObjectWithArray(ByRef Obj As Object, ThisData() As Variant, Optional PropertyName As String = "AddItem")Dim lng_i                   As Long    If ItsIniArray(VarArrPtr(ThisData)) Then        For lng_i = LBound(ThisData()) To UBound(ThisData())            Call CallByName(Obj, PropertyName, VbMethod, ThisData(lng_i))            FillObjectWithArray = FillObjectWithArray + 1        Next lng_i    End IfEnd Function Public Function ItsIniArray(ByVal PtrToArray As Long) As BooleanDim lng_Ptr                 As Long    Call CopyMemory(lng_Ptr, ByVal PtrToArray, 4)    ItsIniArray = lng_Ptr <> 0End Function  
 Si estas con Ado solo pasale un en la propiedad "DataSource" el RecordSet y listo se llenara automaticamente el ComboBox. Dulces Lunas!¡. . |  
						| 
								|  |  
								| « Última modificación: 11 Diciembre 2010, 02:38 am por BlackZeroX▓▓▒▒░░ » |  En línea | 
 
 The Dark Shadow is my passion. |  |  |  | 
			| 
					
						| raul338 
								       
								
								 Desconectado 
								Mensajes: 2.633
								
								 
								La sonrisa es la mejor forma de afrontar las cosas
								
								
								
								
								
								     | 
 
novalida, Eso depende del entorno de la conexion que uses. Yo siempre trabajo en entorno desconectado (no enlazo controles, sino que hago una clase que haga las llamadas, la propiedad Text no invoca al evento Change, por lo que no se entra en un ciclo infinito) De todas formas no es que sea algo "uuuyyy que feo", creeme, hay cosas peores   BlackZeroX, no entendi tu punto      |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| BlackZeroX 
								Wiki  Desconectado 
								Mensajes: 3.158
								
								 
								I'Love...!¡.
								
								
								
								
								
								     | 
 
. por lo que lei quiere agregar un tecto que lo identifique el index, bueno solo agrege dicho codigo como ejemplo ya que si agrega indicando el Index es erroneo, es decir, si agregue en un caso anterior un objeto con Index 2 por ejemplo y ya tengo 42 elementos solo le indico al objeto que agregue dicho elemento en la posicion 3 de la lista ( esto se ve claramente en el codigo anterior ). Ahora lo que veo que que si va a trabajar con una BDD es mejor que cree una tabla donde agregue los meses, por ende, con ADO ya en el programna solo realiza dicha consulta y lo vacia en un RecordSet y el mismo lo vacia en la propiedad DataSource si no me equivoco claro... De esta manera se agregan los elementos en la posicion deseada con su ID indicado y en orden (obviamente si le hace un additem en un index ya ocupado habra un error como ya expuse) De manera mas breve... del por que puse el codigo de arriba... Al hacer lo que me proponéis siempre sale un elemento por debajo. Es decir, el índice del combobox es 0, pero yo le indiqué para el elemento "Enero" el índice 1. Al indicarle en el textbox el índice 1 me cambia el combobox a "Febrero" y no "Enero".
 :S
 
 
 Lo que pasa que de forma interna el comboBox, no trabaja con "tags" en los elementos es decir si le indicas 1 no valeAhora si trabajas con una BDD el ID deberia de empezar por 0, pero oigual DataSource del ComboBox NO ASEGURA QUE cada elemento se encuentre definido por un Index, esto ya deberas de manejarlo en un RecordSet en memoria y no en un control, ya que la mayoria de los controles que trabajan con elementos y su consulta es por propiedad index habitualmente estos empiesan SIN SALTARSE desde 0 hasta CantidadDeElementos -1 Dulces Lunas!¡. |  
						| 
								|  |  
								| « Última modificación: 11 Diciembre 2010, 03:38 am por BlackZeroX▓▓▒▒░░ » |  En línea | 
 
 The Dark Shadow is my passion. |  |  |  | 
			| 
					
						| pushuno 
								
								 Desconectado 
								Mensajes: 1
								
								
								
								
								
								   | 
 
novalida, buscando una solucion a lo mismo entre en tu post y como no pude encontrar en ningun lado una respuesta me armé una funcion que se encargue de esto.  Public Function seleccionarPorItemData(cmb As ComboBox, sel As Integer)Dim i As Integer
 
 For i = 0 To cmb.ListCount - 1
 If (CStr(cmb.ItemData(i)) = sel) Then 'compara el valor del que buscamos con los itemdata de todos
 cmb.ListIndex = i 'si lo encuentra marca como seleccionado el item
 End If
 Next
 End Function
espero te sirva, abrazo Pushuno! |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| KaRoMe 
								
								 Desconectado 
								Mensajes: 1
								
								
								
								
								
								   | 
 
Se que en este momento ni al caso pero x si alguien entra a leer el detalle que no notaron es q el queria decirle al combo box que al introducir el 1 pusiera enero cuando en realidad la lista arranca en 0 osea solo era de decirle al textbox que le restara 1 al numero que el usuario ingresara |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | seleccionar elemento listbox Programación Visual Basic
 | amtapias | 1 | 4,929 |  13 Marzo 2006, 15:55 pm por .Slasher-K.
 |  
						|   |   | combobox y dataset si carga pero no puedo seleccionar los datos .NET (C#, VB.NET, ASP)
 | raul006 | 5 | 7,893 |  18 Noviembre 2009, 03:15 am por Hadess_inf
 |  
						|   |   | Duda Seleccionar o Alterar Elemento con Jquery Desarrollo Web
 | Slikp | 1 | 2,647 |  15 Enero 2015, 12:45 pm por #!drvy
 |  
						|   |   | Agregar elemento a ComboBox .NET (C#, VB.NET, ASP)
 | papydeath95 | 5 | 4,293 |  3 Marzo 2016, 23:48 pm por Eleкtro
 |  
						|   |   | MOVIDO: Agregar elemento a ComboBox Programación Visual Basic
 | Eleкtro | 0 | 1,906 |  3 Marzo 2016, 21:57 pm por Eleкtro
 |    |