Entwickler-Ecke
WinForms - C# Autocomplete Keypress auswahl
nex5 - Do 19.03.15 20:24
Titel: C# Autocomplete Keypress auswahl
Hallo zusammen,
ich habe ein Problem bei meinem Autocomplete. Ich habe diesen Code
http://www.getcodesamples.com/src/C5BBCF97/B4740FE5
bei mir angepasst und funktioniert auch soweit gut.
Aber ich habe versucht es so umzubauen, dass ich die einzelnen Elemente mit
Den Up-, Down- und Enter-Key auswählen kann. Habe es aber nicht geschafft.
Vielleicht ist es auch kompliziert, weil es auf einer Textbox und einem Panel aufbaut.
Kann mir einer dabei helfen?
MfG
nex5
Ralf Jansen - Do 19.03.15 21:37
Eine normale ComboBox hat bereits einen AutoCompleteMode.
Insofern wäre die erste Frage warum du das selbst implementierst?
nex5 - Do 19.03.15 21:54
Weil ich das Design anpassen möchte.
Habe welchselnde Hintergrundfarben zu den einzelnen Einträgen,
Einträge werden fett dargestellt bei MouseOver
und die Schriftgröße ist mir bei einer normalen Combobox zu klein.
Ralf Jansen - Do 19.03.15 22:33
Eine ComboBox hat auch einen OwnerDraw Mode ;) Dazu DrawMode auf OwnerDrawVariable oder OwnerDrawFixed setzen und dann das passende im DrawItem Event implementieren.
Aber ich habs gerade ausprobiert und AutoComplete funktioniert wunderbar, OwnerDraw funktioniert wunderbar aber beides zusammen nicht :gruebel: Das muss ich mich mal kurz drin eingraben.
Edit: sieht so aus als würde AutoComplete ein spezielles DropDown Fenster benutzen und nicht die Standard DropDown Liste der ComboBox. Da kann man natürlich auf dem Standard rummalen wie man will wenn die nicht benutzt wird :x Ich würde immer noch vorschlagen eine ComboBox zu verwenden und deren OwnerDraw Mode auszunutzen. Den AutoComplete Teil müsste man zwar selber machen es sollte aber einfacher sein den Look der ComboBox anzupassen als andersrum einem Panel denn Feel einer ComboBox zu verpassen.
nex5 - Do 19.03.15 22:43
Ohh okay, den OwnerDraw Mode kannte ich noch gar nicht.
Kannst du mir dazu mal ein kleines Beispiel geben?
Ralf Jansen - Do 19.03.15 22:50
Aus meinem TestCode.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| private void Form1_Load(object sender, EventArgs e) { comboBox1.Items.AddRange(Enum.GetNames(typeof(KnownColor))); comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
}
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) return;
string colorName = comboBox1.Items[e.Index].ToString(); var color = Color.FromKnownColor((KnownColor)Enum.Parse(typeof(KnownColor), colorName, true)); Brush brush = new SolidBrush(color);
var simpleContrastingColor = Color.FromArgb((byte)~color.R, (byte)~color.G, (byte)~color.B); e.Graphics.FillRectangle(new SolidBrush(simpleContrastingColor), e.Bounds); e.Graphics.DrawString(colorName, e.Font, brush, (RectangleF)e.Bounds); } |
nex5 - Do 19.03.15 23:09
Okay ich werde es mal versuchen.
Vielen Dank ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!