net - filtrar combobox c#
Las ventanas WinForms ComboBox DropDown y Autocompletar aparecen ambas (10)
¡Agregue una sola línea de código a su evento ComboBox
KeyDown
y el problema está resuelto!
private void comboBox_NameAndID_KeyDown(object sender, KeyEventArgs e)
{
comboBox_NameAndID.DroppedDown = false;
}
Tengo un ComboBox
en una aplicación de winforms con este código:
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
DataTable t = new DataTable();
t.Columns.Add("ID", typeof(int));
t.Columns.Add("Display", typeof(string));
for (int i = 1; i < 2000; i++)
{
t.Rows.Add(i, i.ToString("N0"));
}
comboBox1.DataSource = t;
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Display";
Luego sigo estos pasos cuando se abre la ventana:
- Haga clic en el botón desplegable
ComboBox
- esto muestra la lista de elementos y selecciona el texto en elComboBox
- Escriba ''5'', ''1'' ... es decir, estoy buscando usar autocompletar para buscar 515, 516, etc.
- Verá que la ventana de autocompletar ahora aparece EN LA PARTE SUPERIOR de la lista desplegable. Sin embargo, si paso el mouse, es la ventana desplegable oscurecida detrás de la ventana de autocompletar que está recibiendo los eventos del mouse, incluido el clic. Así que creo que estoy haciendo clic en un elemento de autocompletar, pero en realidad hago clic en algo totalmente aleatorio que no puedo ver.
¿Es esto un error en el ComboBox
? Estoy usando Windows 7 si eso importa. ¿Estoy configurando el ComboBox
incorrectamente de alguna manera?
Tenga en cuenta también que el uso del TECLADO utiliza el menú desplegable de autocompletar. Así que las teclas de flecha arriba / abajo están usando la ventana frontal, pero el mouse está usando la ventana trasera.
Agregar al evento de pulsación de tecla / a.
Dim box As ComboBox = sender
box.DroppedDown = False
Eso es weired. Su código se ve bien para mí y usé esta característica de Autocompletar varias veces y no se muestran tanto la lista desplegable como la lista Autocompletar.
Mi sugerencia sería
Establezca DataSource después de Display / Value Members. No puedo recordar por qué, pero el otro causó algunos problemas.
comboBox1.ValueMember = "ID"; comboBox1.DisplayMember = "Display"; comboBox1.DataSource = t;
Establezca AutoCompleteSource al final de su código (después de agregar DataSouce)
Tal vez eso ayude.
No hay problema para obtener una repro para esto simplemente estableciendo las propiedades de PropertyGrid. Se comporta de esta manera tanto en Win7 como en Windows XP.
Este es un comportamiento roto documentado en este artículo de comentarios . Como se indicó, Microsoft no está considerando una solución. Una solución posible es deshabilitar la función de autocompletar en un controlador de evento DropDown y volver a habilitarlo en un controlador de evento DropDownClosed.
Seleccione ComboBox desde la vista de diseño y configure "Agregar" a la propiedad AutoCompleteMode, esto sugerirá el elemento sin abrir una ventana.
Seleccione ComboBox desde la vista de diseño y configure "Ninguno" en la propiedad AutoCompleteMode.
Simplemente agrega un elemento en la colección.
Ahora vaya a la opción de propiedades del cuadro combinado, elija AutoCompleteSource = ListItems AutocompleteMode = sugerir
nota: fuente de autocompletar tiene muchas opciones según su requisito :)
Soy un estudiante brasileño de codificación y pierdo muchas horas buscando solucionarlo en mi proyecto. ¡Y aquí lo vi en unos segundos!
Mi código parece esto:
private void populateCombos()
{
persist.ShowLst(dspMember, vlMember,varTable,lstBox,varWhere);
persist.ShowLst(dspMember, vlMember,varTable,ddlist1,varWhere);
persist.ShowLst(dspMember, vlMember,varTable, ddlist2,varWhere);
ddList1.Text = null;
ddList2.Text = null;
lstBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
lstBox.AutoCompleteSource = AutoCompleteSource.ListItems;
lstBox.Text = null;
}
WinForms ComboBox DropDown ... la respuesta es esta ...
escriba el código siguiente en comboBox1 Enter event ..
private void comboBox1_Enter(object sender, EventArgs e)
{
comboBox1.DroppedDown = true;
}
Ahora para ComboBox1 Autocompletar ...
escribe este AutoComplete()
en el evento de carga de página ... así funciona ...
public void AutoComplete()
{
try
{
MySqlConnection conn = new
MySqlConnection("server=localhost;database=databasename;user
id=root;password=;charset=utf8;");
MySqlCommand cmd = new MySqlCommand("select distinct
(columnName) from tablename", conn);
DataSet ds = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(ds, "tablename");
AutoCompleteStringCollection col = new
AutoCompleteStringCollection();
int i = 0;
for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
col.Add(ds.Tables[0].Rows[i]["columnName"].ToString());
}
comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
comboBox1.AutoCompleteCustomSource = col;
comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
para tener solo uno abierto a la vez, puede usar comboBox1.Droppeddown = true abrir el regular, falso, el Autocompletar solo aparecerá