Controllo TextBox completo automatico

Voglio avere un controllo textbox che suggerisce e aggiunge valori da un database in un’applicazione Windows con C # 2008 e LINQ.

Lo faccio con una casella combinata ma non riesco a farlo con una casella di testo.

Come lo faccio?

Questo potrebbe non essere il modo migliore per fare le cose, ma dovrebbe funzionare:

this.textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; this.textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; private void textBox1_TextChanged(object sender, EventArgs e) { TextBox t = sender as TextBox; if (t != null) { //say you want to do a search when user types 3 or more chars if (t.Text.Length >= 3) { //SuggestStrings will have the logic to return array of strings either from cache/db string[] arr = SuggestStrings(t.Text); AutoCompleteStringCollection collection = new AutoCompleteStringCollection(); collection.AddRange(arr); this.textBox1.AutoCompleteCustomSource = collection; } } } 

Controlla le proprietà AutoCompleteSource , AutoCompleteCustomSource e AutoCompleteMode .

 textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; AutoCompleteStringCollection col = new AutoCompleteStringCollection(); col.Add("Foo"); col.Add("Bar"); textBox1.AutoCompleteCustomSource = col; 

Nota che il designer ti permette di farlo senza scrivere alcun codice …

ovviamente dipende da come lo si implementa ma forse questo è un buon inizio:

 using System.Windows.Forms; public class AutoCompleteTextBox : TextBox { private string[] database;//put here the strings of the candidates of autocomplete private bool changingText = false; protected override void OnTextChanged (EventArgs e) { if(!changingText && database != null) { //searching the first candidate string typed = this.Text.Substring(0,this.SelectionStart); string candidate = null; for(int i = 0; i < database.Length; i++) if(database[i].Substring(0,this.SelectionStart) == typed) { candidate = database[i].Substring(this.SelectionStart,database[i].Length); break; } if(candidate != null) { changingText = true; this.Text = typed+candidate; this.SelectionStart = typed.Length; this.SelectionLength = candidate.Length; } } else if(changingText) changingText = false; base.OnTextChanged(e); } } 

Non sono sicuro che funzioni molto bene, ma penso che la base di questo codice sia abbastanza buona.

 To AutoComplete TextBox Control in C#.net windows application using wamp mysql database... here is my code.. AutoComplete(); write this **AutoComplete();** text in form-load event.. private void Autocomplete() { try { MySqlConnection cn = new MySqlConnection("server=localhost; database=databasename;user id=root;password=;charset=utf8;"); cn.Open(); MySqlCommand cmd = new MySqlCommand("SELECT distinct Column_Name FROM table_Name", cn); DataSet ds = new DataSet(); MySqlDataAdapter da = new MySqlDataAdapter(cmd); da.Fill(ds, "table_Name"); 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]["Column_Name"].ToString()); } textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; textBox1.AutoCompleteCustomSource = col; textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; cn.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } 

Per raggiungere questo risultato:

inserisci la descrizione dell'immagine qui

è ansible seguire due modi, la scheda Proprietà abs by environment e l’impostazione delle seguenti proprietà:

inserisci la descrizione dell'immagine qui

Il modo migliore è creare questo effetto per codice, vedere il mio esempio come segue:

 AutoCompleteStringCollection sourceName = new AutoCompleteStringCollection(); foreach (string name in listNames) { sourceName.Add(name); } txtName.AutoCompleteCustomSource = sourceName; txtName.AutoCompleteMode = AutoCompleteMode.Suggest; txtName.AutoCompleteSource = AutoCompleteSource.CustomSource; 
  private void TurnOnAutocomplete() { textBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend; textBox.AutoCompleteSource = AutoCompleteSource.CustomSource; AutoCompleteStringCollection collection = new AutoCompleteStringCollection(); string[] arrayOfWowrds = new string[]; try { //Read in data Autocomplete list to a string[] string[] arrayOfWowrds = new string[]; } catch (Exception err) { MessageBox.Show(err.Message, "File Missing", MessageBoxButtons.OK, MessageBoxIcon.Error); } collection.AddRange(arrayOFWords); textBox.AutoCompleteCustomSource = collection; } 

Devi solo chiamarlo una volta dopo aver avuto i tuoi dati necessari per l’elenco di completamento automatico. Una volta legato rimane con il textBox. Non è necessario o si desidera chiamarlo ogni volta che il testo viene modificato nella casella di testo, che ucciderà il programma.

È ansible albind all’evento KeyDown e quindi interrogare il database per quella porzione di testo che l’utente ha già inserito. Ad esempio, se l’utente inserisce “T”, cerca le cose che iniziano con “T”. Quindi, quando inseriscono la lettera successiva, ad esempio “e”, cerca le cose nella tabella che iniziano con “Te”.

Gli articoli disponibili potrebbero essere visualizzati in un ListBox “mobile”, ad esempio. Dovresti posizionare il ListBox appena sotto il TextBox in modo che possano vedere le voci disponibili, quindi rimuovere il ListBox quando hanno finito di digitare.

 private void textBox1_TextChanged(object sender, EventArgs e) { try { textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; AutoCompleteStringCollection col = new AutoCompleteStringCollection(); con.Open(); sql = "select *from Table_Name; cmd = new SqlCommand(sql, con); SqlDataReader sdr = null; sdr = cmd.ExecuteReader(); while (sdr.Read()) { col.Add(sdr["Column_Name"].ToString()); } sdr.Close(); textBox1.AutoCompleteCustomSource = col; con.Close(); } catch { } } 
  You can add a parameter in the query like @emailadd to be added in the aspx.cs file where the Stored Procedure is called with cmd.Parameter.AddWithValue. The trick is that the @emailadd parameter doesn't exist in the table design of the select query, but being added and inserted in the table. USE [DRDOULATINSTITUTE] GO /****** Object: StoredProcedure [dbo].[ReikiInsertRow] Script Date: 5/18/2016 11:12:33 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[ReikiInsertRow] @Reiki varchar(100), @emailadd varchar(50) as insert into dbo.ReikiPowerDisplay select Reiki,ReikiDescription, @emailadd from ReikiPower where [email protected]; Posted By: Aneel Goplani. CIS. 2002. USA