Laden...

Combobox welches mehrere Tasteneingaben abwartet

Erstellt von thomae vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.149 Views
T
thomae Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren
Combobox welches mehrere Tasteneingaben abwartet

Hallo Leute

ich brauche wieder mal Eure Hilfe.

Ich suche einen möglichst einfachen Weg eine Combobox so abzuändern, dass ich beispielsweise 3 Buchstaben schnell nacheinander eingeben kann und diese dann als 1 Token mit allen vorhandenen Items vergleichen kann und so dass richtige finden kann.

Anwendungsbeispiel:

Ich habe eine Combobox mit allen Ländern dieser Welt und möchte jetzt so schnell wie möglich zum Item Ausstralien springen. Dazu möchte ich die Buchstaben "AUS" eingeben und anschliessend zu richtigen Item springen..

Irgend eine clevere Idee? Wäre fantastisch

Gruess

Thomä

121 Beiträge seit 2006
vor 17 Jahren

Hallo thomae,

ich denke, du benötigst eine ComboBox und
arbeitest u.a. mit den Membern

.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
.AutoCompleteSource = AutoCompleteSource.CustomSource;
.AutoCompleteCustomSource = new AutoCompleteStringCollection();
.AutoCompleteCustomSource.AddRange(...);
.DropDownStyle = ComboBoxStyle.DropDown;

Bei DataBinding auch noch z.B. mit
.DataBindings
.DataSource
.DisplayMember
.ValueMember

thomae, bist Du aus Biberach ?

Gruß Hape

T
thomae Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Hallo Hape

danke für deinen Input. Bisher arbeite ich mit einer DropDownList, da ich verhindern möchte, dass der Benutzer Dinge eingeben kann die nicht funktionieren.

Die DataBindings verwende ich so wie von dir erwähnt..

Kannst du mir folgende Punkte noch etwas erläutern:

.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
.AutoCompleteSource = AutoCompleteSource.CustomSource;
.AutoCompleteCustomSource = new AutoCompleteStringCollection();
.AutoCompleteCustomSource.AddRange(...);

Nö bin aus der Schweiz - Biel..

Gruess Thomä

121 Beiträge seit 2006
vor 17 Jahren

Hi Thomae,
DropDownList geht nicht mit AutoCompleteMode = AutoCompleteMode.SuggestAppend zusammen.
Um zu verhindern, dass die User nix ungültiges eingeben, würde ich das Validating Event verwenden.
Gruß Hape

T
thomae Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Jep habs bemerkt..

Funktioniert bestens.
Habe es mit databinding gelöst und anschliessend den Validating Event verwendet..


private void cboCountry_Validating(object sender, CancelEventArgs e)
{
	if(((ComboBox)sender).Text.Length > 0)
	{
		string text = ((ComboBox)sender).Text.ToUpper();	
		bool valueFound = false;
		for(int i = 0; i < ((ComboBox)sender).Items.Count; i++)
		{
		  	if(((ComboBox)sender).Items[i].ToString().CompareTo(text) == 0)
			{
				valueFound = true;
				break;
			}
		}
		if(!valueFound)
		{
			e.Cancel = true;
		}
	}
}



private void dbReadCountries()
{
    try
    {
        this.countryArrayList.Clear();
		
		IDbCommand oraCmd = OracleDBManager.Instance.CreateDbCommand();
        oraCmd.CommandText = "SELECT * FROM COUNTRIES ORDER BY COUNTRY";
		using (IDataReader or = OracleDBManager.Instance.ExecuteReader(null, oraCmd))
		{
			while (or.Read())
			{
				this.countryArrayList.Add(new CountryItem(or["COUNTRY"].ToString(), or["	code"].ToString()));
			}
		}
        // binding DataSource to Combobox 
		
        this.cboCountry.DataSource = null;
        this.cboCountry.DisplayMember = "Text";
        this.cboCountry.ValueMember = "Name";
        this.cboCountry.DataSource = countryArrayList;
		string[] autoCompletion = new string[countryArrayList.Count];
		for(int i = 0; i < countryArrayList.Count; i++)
		{
			autoCompletion[i] = this.cboCountry.Items[i].ToString();
		}

		this.cboCountry.AutoCompleteCustomSource = new AutoCompleteStringCollection();
		this.cboCountry.AutoCompleteCustomSource.AddRange(autoCompletion);	
    }
    catch (System.Exception ex)
    {
        
    }
}


T
thomae Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

Danke noch mal

121 Beiträge seit 2006
vor 17 Jahren

Klasse!