2009-02-07 27 views
13

Quiero usar un ComboBox con el estilo DropDownList (el que lo hace parecer un botón para que no pueda ingresar un valor) para insertar un valor en un cuadro de texto. Quiero que el cuadro combinado tenga una etiqueta de texto llamada 'Comodines' y cuando selecciono un comodín de la lista, el valor seleccionado se inserta en un cuadro de texto y el texto del cuadro combinado sigue siendo 'Comodín'. Mi primer problema es que no puedo establecer un valor de texto cuando el cuadro combinado está en estilo DropDownList. Al utilizar las propiedades, la paleta no funciona, el valor del texto simplemente se borra al hacer clic en off, y se agrega comboBox.Text = "Comodines"; form_load tampoco funciona. ¿Alguien puede ayudar?C# ComboBox en estilo DropDownList, ¿cómo configuro el texto?

Respuesta

23

El código que especifique:

comboBox.Text = "Wildcards"; 

... debería funcionar. La única razón por la que no lo haría es porque el texto que especifique no es un elemento dentro de la lista de elementos del comboBox. Al usar el estilo DropDownList, solo puede establecer el texto en los valores que realmente aparecen en la lista.

Si es el caso de que está tratando de configurar el texto en comodines y ese elemento no aparece en la lista, y una solución alternativa no es aceptable, es posible que tenga que estar un poco sucio con el código y agregar un elemento que se elimina temporalmente cuando se expande la lista desplegable.

Por ejemplo, si tiene un formulario que contiene un cuadro combinado llamado "comboBox1" con algunos artículos y un botón llamado "botón 1" se podría hacer algo como esto:

private void button1_Click(object sender, EventArgs e) 
{ 
    if (!comboBox1.Items.Contains("Wildcards")) 
    { 
     comboBox1.Items.Add("Wildcards"); 
    } 

    comboBox1.Text = "Wildcards"; 
} 

private void comboBox1_DropDown(object sender, EventArgs e) 
{ 
    if (comboBox1.Items.Contains("Wildcards")) 
     comboBox1.Items.Remove("Wildcards"); 
} 

Eso es bastante rápido y sucio, pero por capturando el evento DropDownClosed también podría limpiarlo un poco, agregando el elemento "Comodines" de vuelta según sea necesario.

+1

Gracias por eso, aprendí mucho de mi C# del sitio web blackwasp y todavía me refiero a él. ¡Gracias! –

+0

Le doy la más cordial bienvenida :-) – BlackWasp

+1

Por extraño que parezca, establecer la propiedad "Texto" dentro del diseñador de formularios no es suficiente; en mi caso, debe establecerse en el código subyacente. Intentar establecerlo desde la ventana de propiedades del formulario simplemente borrará la propiedad "Texto" después de hacer clic en ella. – Rachael

-1

Prueba este

comboBox1.SelectedValue = "Wildcards"; 
-1

Esto puede ser una posible solución:

comboBox1.SelectedValue = comboBox1.Items.FindByText("Wildcards").Value; 
2

Puede seleccionar uno de los elementos en FormLoad o en forma de constructor:

public MyForm() 
{ 
    InitializeComponent(); 

    comboBox.SelectedIndex = 0; 
} 

o

private void MyForm_Load(object sender, EventArgs e) 
{ 
    comboBox.SelectedIndex = 0; 
} 
+0

Me encanta lo limpia que es esta solución. +1 –

Cuestiones relacionadas