Autor Beitrag
nex5
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 19.03.15 20:24 
Hallo zusammen,

ich habe ein Problem bei meinem Autocomplete. Ich habe diesen Code
www.getcodesamples.c...rc/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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 19.03.15 22:50 
Aus meinem TestCode.

ausblenden 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;

    //comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    //comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
}

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);  // Hintergrundfarbe billiges invertieren 
    e.Graphics.FillRectangle(new SolidBrush(simpleContrastingColor), e.Bounds);
    e.Graphics.DrawString(colorName, e.Font, brush, (RectangleF)e.Bounds);
}


Zuletzt bearbeitet von Ralf Jansen am Do 19.03.15 23:12, insgesamt 1-mal bearbeitet
nex5 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 19.03.15 23:09 
Okay ich werde es mal versuchen.

Vielen Dank ;)