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ä
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
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ä
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
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)
{
}
}