| 

.NET C# Java Javascript Exception

1
Ich benutze eine ComboBox (Windows Forms) mit DropDownStyle=DropDown und AutoCompleteMode=SuggestAppend.
Der Benutzer darf also freie Einträge machen oder sich einen Eintrag aus der Auflistung aussuchen. Ferner möchte ich, dass der Anwender über die Return Taste eine bestimmte Aktion auslösen kann, dafür nutze ich das KeyDown-Ereignis und werte den KeyCode wert der KeyEventArgs aus. Soweit ist das ja alles kalter Kaffee...
Allerdings feuert die ComboBox auch ein KeyDown-Ereignis, wenn man einen Eintrag aus der Suggest-Liste auswählt. Also man fängt zu nächst an zu Tippen, dann öffnet sich die Suggest-Liste und man wählt mit der Maus einen Eintrag aus den Vorschlägen aus.
Zunächst dachte ist ja kein Problem, ich prüfe einfach ob der Wert DroppedDown==True ist - ist er aber nicht. Wenn man ganz normal mit der Maus die DropDown-Liste öffnet und einen Eintrag auswählt, wird das KeyDown Ereignis nicht gefeuert.

Ich möchte aber nur die "echten" KeyDown-Ereignisse verarbeiten. Hat jemand eine Idee oder schon das gleiche Problem gehabt?
05.03.2012
CodingWarlock 53 5
3 Antworten
0
Schau mal, ob dir ein Handler auf dem PreviewKeyDown-Event der Combobox etwas bringt. Habe gerade damit etwas gespielt, scheint in deinem Sinne zu funktionieren.
05.03.2012
KN 1,7k 1 8
Ja den Gedanken hatte ich auch schon, aber leider ist zum Zeitpunkt dieses Events, die Eigenschaft DroppedDown auch schon false.
Das komische ist, dass wen die SuggestListBox angezeigt wird, das DropDown-Event nicht gefeuert wird. Ich bin mir nicht sicher, ob es sich bei dem Verhalten nicht um ein Bug handelt.
CodingWarlock 06.03.2012
0
Das sehe ich auch gerade. Ich hatte das gestern nur mit Mausklick auf SuggestList gecheckt.
Ist eine Krücke, aber wenn gar nichts anderes geht, könntest du beim Drücken der Return-Taste den Text der Combobox überprüfen. Dann kannst du unterscheiden, ob es ein bekannter Text aus der Liste ist oder ein neuer Text. Würde das helfen?
06.03.2012
KN 1,7k 1 8
0
Es gibt ein kleinen Workaround mit Hilfe der Events PreviewKeyDown,
SelectedIndexChanged und KeyDown. Da das SelectedIndexChanged Event in diesem Fall zwischen
PreviewKeyDown und KeyDown gefeuert wird, kann man mit Hilfe einer kleiner Hilfsvariablen (im Beispiel unten selectedIndexChanged), das falsche KeyDown erkennen.

namespace KeyDownProblem
{
public partial class Form1 : Form
{
private bool selectedIndexChanged;

public Form1()
{
InitializeComponent();

comboBox1.PreviewKeyDown += delegate { selectedIndexChanged = false; };
comboBox1.SelectedIndexChanged += delegate { selectedIndexChanged = true; };
comboBox1.KeyDown += HandleComboBox1_KeyDown;
}

private void HandleComboBox1_KeyDown(object sender, KeyEventArgs args)
{
if (args.KeyCode == Keys.Enter && !selectedIndexChanged)
{
Debug.WriteLine("######## Und Action! ########");
}
}
}
}


Ist zwar nicht 100% ideal, aber ich kann damit leben.
06.03.2012
CodingWarlock 53 5

Stelle deine Form-Frage jetzt!