2010-11-30 36 views

Respuesta

8

Si se refiere a la demostración sugerencias, entonces es una simple cuestión de cambiar una propiedad cuando se tiene el cuadro de texto seleccionado en el IDE de elección:

Las opciones que se muestran en la imagen le permiten cambiar las reglas para autocompletar texto en el cuadro de texto, así como la fuente de las sugerencias. (Visual Studio 2010)

Properties

Puede ir al siguiente enlace para obtener más información sobre el control de cuadro de texto.

MSDN Text Box Control

0

estos Filtros resultados basados ​​en la entrada del usuario. La optimización de las listas grandes, poblando sus propios datos y manejo de errores dejado fuera para que lo complete:

public partial class Form1 : Form 
    { 

     List<String> data; 
     ListView lst = new ListView(); 
     TextBox txt = new TextBox(); 

     public Form1() 
     { 
      InitializeComponent(); 
      data = new List<string>("Lorem ipsum dolor sit amet consectetur adipiscing elit Suspendisse vel".Split()); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      this.Controls.Add(txt); 
      lst.Top = 20; 
      txt.TextChanged += new EventHandler(txt_TextChanged); 
      lst.View = View.List; 
      this.Controls.Add(lst); 
      list_items(""); 
     } 

     void txt_TextChanged(object sender, EventArgs e) 
     { 
      list_items(txt.Text); 
     } 

     void list_items(string filter) 
     { 
      lst.Items.Clear(); 
      List<string> results = (from d in data where d.Contains(filter) select d).ToList(); 
      foreach (string s in results) 
      { 
       lst.Items.Add(s); 
      } 
     } 
    } 

Para obtener el cuadro combinado de auto completo, establecer los AutoCompleteSource y AutoCompleteMode propiedades:

cbo.AutoCompleteSource = AutoCompleteSource.ListItems; 
cbo.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 

Los La fuente ListItems le dice al combo que use su colección de elementos como la fuente de autocompletar.

+0

en este método solo mostraba el texto por el inicio "a" y no mostraba el texto "a" – jozi

+0

Eso requeriría una solución personalizada, ya que esta funcionalidad no está incorporada de manera predeterminada. – invert

-2

Creo que su mejor opción es anular el evento OnKeyDown (KeyEventArgs e) y utilizar el valor para filtrar el ComboBox.AutoCompleteCustomSource. Luego, como se indicó anteriormente, cambie AutoCompleteSource a AutoCompleteSource.ListItems.

+0

El manejo de 'OnKeyDown' generalmente se considera su peor apuesta. Entre otras cosas, no podrá manejar la entrada pegada en el control Editar (por ejemplo, haga clic con el botón derecho -> Pegar). – IInspectable

+0

para combobox ref this http://stackoverflow.com/questions/11780558/c-sharp-winforms-combobox-dynamic-autocomplete/41461062#41461062 –

1

Así es como autocompletaré para un valor específico en un cuadro comboDropDown.

void comboBox_Leave(object sender, EventArgs e) 
    { 
     ComboBox cbo = (sender as ComboBox); 
     if (cbo.Text.Length > 0) 
     { 
      Int32 rowIndex = cbo.FindString(cbo.Text.Trim()); 
      if (rowIndex != -1) 
      { 
       cbo.SelectedIndex = rowIndex; 
      } 
      else 
      { 
       cbo.SelectedIndex = -1; 
      } 
     } 
     else 
     { 
      cbo.SelectedIndex = -1; 
     } 

    } 
3

aplicación de autocompletar de Windows Forms utiliza autocompletar objeto de Shell, que sólo puede hacer un partido "BeginWith" hasta que Windows Vista. Si puede exigir a los usuarios que actualicen a Windows Vista, puede use IAutoComplete2::SetOptions para especificar ACO_NOPREFIXFILTERING. De lo contrario, me temo que necesita write your own.

+0

¿Cómo se hace esto cuando se utilizan las implementaciones predeterminadas de TextBox y ComboBox? – test

+0

No puedes. La implementación de Windows Forms no se puede personalizar para esta tarea. –

+0

Gracias por confirmar, creo que basándome en su implementación que ha vinculado. ¿Puede decirme por qué la implementación que hizo no maneja adecuadamente las teclas arriba y abajo? Si utilizo el indicador ACO_NOPREFIXFILTERING con su implementación, las teclas arriba y abajo seleccionarán el último y el primer elemento, respectivamente, y luego cerrarán la ventana de autocompletar. No se muestra resaltado de selección. – test

0

Sé que este es un tema antiguo, pero traté muy duro de encontrar una solución para el filtrado autocompletado de C# y no pude encontrar ninguno, así que ideé mi propia manera simple y fácil, así que solo la compartiré para aquellos que pueden pensar que es útil y que quieren usar en sus proyectos. No utiliza las funciones de autocompletar del control. Lo que hace simplemente es obtener el texto ingresado desde el cuadro combinado, buscarlo en la fuente y luego mostrar solo los que coincidan desde el origen como la nueva fuente del cuadro combinado. Lo implementé en el combobox 'KeyUp evento.

Digamos que (en realidad esto es lo que hago para casi todos los casos cuando quiero autocompletar) tenemos un DataTable llamado globalmente dt_source para ser el origen del combobox y tiene dos columnas: id (int) y nombre (cuerda).

DataTable dt_source = new DataTable("table"); 
dt_source.Columns.Add("id", typeof(int)); 
dt_source.Columns.Add("name", typeof(string)); 

Y esto es lo que mi método KeyUp se parece a:

private void cmb_box_KeyUp(object sender, KeyEventArgs e) 
{ 
    string srch = cmb_box.Text; 
    string srch_str = "ABackCDeleteEFGHIJKLMNOPQRSpaceTUVWXYZD1D2D3D4D5D6D7D8D9D0"; 
    if (srch_str.IndexOf(e.KeyCode.ToString()) >= 0) 
    { 
    cmb_box.DisplayMember = "name"; // we want name list in the datatable to be shown 
    cmb_box.ValueMember = "id"; // we want id field in the datatable to be the value 
    DataView dv_source = new DataView(dt_source); // make a DataView from DataTable so ... 
    dv_source.RowFilter = "name LIKE '%"+ srch +"%'"; // ... we can filter it 
    cmb_box.DataSource = dv_source; // append this DataView as a new source to the combobox   
    /* The 3 lines below is the tricky part. If you repopulate a combobox, the first 
     item in it will be automatically selected so let's unselect it*/ 
    cmb_box.SelectedIndex = -1; // unselection 
    /* Again when a combobox repopulated the text region will be reset but we have the 
     srch variable to rewrite what's written before */ 
    cmb_box.Text = srch; 
    /* And since we're rewriting the text region let's make the cursor appear at the 
     end of the text - assuming 100 chars is enough*/ 
    cmb_box.Select(100,0); 
    cmb_box.DroppedDown = true; // Showing the dropdownlist 
    } 
} 
Cuestiones relacionadas