2011-06-05 13 views
6

Tengo un pequeño problema con la opción de autocompletar en el cuadro combinado. Todo está funcionando correctamente, excepto que quiero trabajar que Diffrent :)Combobox y autocompletar en C#

Cuando comienzo a escribir en cuadro combinado, autusuggest funcione de la manera que me gusta:

Combo

Pero cuando combobox abre por primera vez, y comience a escribir me sale algo así:

enter image description here

Lo que es más, no puedo recoger elemento del cuadro combinado auto sugerencia, sólo desde esta lista bajo.

AutoCompleteMode es SuggestAppend

me gustaría tener auto sugerencia al igual que en la primera imagen, y en situaciones como la imagen 2, esta primera lista de cuadro combinado debe ser cerrada de alguna manera ..

Respuesta

12

que tenían el mismo problema y lo resolvió de esta manera:

private void comboBox_DropDown(object sender, EventArgs e) 
{ 
    ComboBox cbo = (ComboBox)sender; 
    cbo.PreviewKeyDown += new PreviewKeyDownEventHandler(comboBox_PreviewKeyDown); 
} 

private void comboBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
{ 
    ComboBox cbo = (ComboBox)sender; 
    cbo.PreviewKeyDown -= comboBox_PreviewKeyDown; 
    if (cbo.DroppedDown) cbo.Focus(); 
} 

Una vez que el usuario hace clic en el botón DropDownPreviewKeyDown evento está unido a que ComboBox. Cuando el usuario comienza a escribir, se desencadena un evento recién agregado. En ese caso, verificamos si ComboBox es DroppedDown, si es así, concéntrese en ComboBox.En ComboBox focus DropDown desaparecen y eso es todo.

+1

Esto funcionó perfectamente! –

2

¿Ha probado el otro valores posibles para AutoCompleteMode, que son Append, None y Suggest? Creo que lo que estás buscando es Suggest en lugar de AppendSuggest.

Aquí hay algunos downloadable sample code que ilustran los diferentes modos, si lo necesita.

+0

Lo he probado. Append es para mostrar el resto del valor, y sugerir es esta nueva ventana de combobox. Me gustaría tener este nuevo combobox con el modo de sugerencia. Pero esta primera lista debería cerrarse ... – Elfoc

5

¿Qué ocurre con el uso de los eventos DropDown y DropDownClosed para deshabilitar o cambiar el modo de autocompletar?

+4

Sí, eso funcionó para mí. Aquí hay algunos códigos que puede usar: 'm_cmbNode.DropDown + = (sender, e) => m_cmbNode.AutoCompleteMode = AutoCompleteMode.None; m_cmbNode.DropDownClosed + = (remitente, e) => m_cmbNode.AutoCompleteMode = AutoCompleteMode.SuggestAppend; ' – bsegraves

+1

Esto debe ser marcada como la respuesta – waltmagic

3

Estaba teniendo exactamente el mismo problema. Intenté los eventos DropDown y DropDownClosed para establecer la propiedad AutoCompleteMode en none y sugerir. En esta situación, el evento SelectedIndexChanged no se activa después de seleccionar un elemento con el mouse. Estaba usando la propiedad SelectedValue en el evento SelectedIndexChanged y esta propiedad ya ha cambiado en el momento en que se desencadena el evento DropDownClosed. En mi caso, simplemente llamé al método SelectedIndexChanged del evento DropDownClosed para resolver el problema.

2

También encontré que la implementación de IU predeterminada es una distracción ya que los dos menús desplegables luchan por el control del mouse.

Desea ocultar la lista desplegable cuando se muestran las sugerencias de autocompletar. Hay un mensaje de Windows que muestra el cuadro combinado antes de mostrar las sugerencias de autocompletar. Elegí colapsar la lista desplegable en respuesta a este mensaje. Se requiere una pequeña anulación del cuadro combinado para lograr esto:

Public Class Combobox2 
    Inherits ComboBox 

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     If m.Msg = 135 AndAlso DroppedDown Then 'WM_GETDLGCODE 
      DroppedDown = False 
     End If 
     MyBase.WndProc(m) 
    End Sub 

End Class 
3

Implementar evento en ComboBox KeyDown. Debe tener un aspecto como este.

void cmbExample_KeyDown(object sender, KeyEventArgs e) 
    { 
     if ((sender as ComboBox).DroppedDown) 
      (sender as ComboBox).DroppedDown = false; 
    } 
0
void cmbExample_KeyDown(object sender, KeyEventArgs e) 
{ 
    cmbExample.DroppedDown = false; 
}