Laden...

PropertyGrid - DropDownControl - Entertaste als Bestätigung

Erstellt von snoop83 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.574 Views
S
snoop83 Themenstarter:in
46 Beiträge seit 2006
vor 13 Jahren
PropertyGrid - DropDownControl - Entertaste als Bestätigung

Hallo,

ich habe bereits die Forensuche sowie Google abgegrast, aber leider keine passende Antwort auf meine Frage gefunden. Um es euch einfach zu machen, habe ich soeben ein Minimalbeispiel aus meinem Projekt extrahiert (Code vereinfacht, auf 1 Problem reduziert).

Es geht um folgendes: In einem Projekt verwende ich das PropertyGrid um Objekt-Eigenschaften zu manipulieren. Aus div. Gründen (Lokalisierung, corp. design, Validierung, ...) habe ich eigene Controls für die Editierung von einigen Eigenschaften geschrieben. Nehmen wir beispielsweise die Position eines Elements. Da diese von meinem Zeichenfeld begrenzt ist und nicht kleiner als (0, 0) werden darf, kann ich durch die Editierung mittels eigenem Control die eingebene Position sehr einfach validieren (ich weiß, dass es auch über das PropertyGrid selbst geht).

Mein eigentliches Problem liegt darin, dass ich es nicht schaffe, die Enter-Taste als Bestätigung für die Änderung von Werten abzufangen. Es scheint so, dass diese automatisch dafür verwendet wird, das per DropDown angezeigte Control zu schließen.

Der Screenshot unten zeigt mein Control zur Editierung einer Position. Für das erste NumericUpDown (X-Koordinate) habe ich bereits folgendes versucht:

public LocationControl()
{
	InitializeComponent();
	this.numX.KeyDown += new KeyEventHandler(numX_KeyDown);
}

void numX_KeyDown(object sender, KeyEventArgs e)
{
	if (e.KeyCode == Keys.Enter)
	{
		this.btnAccept.PerformClick();
	}
}

Das ganze verhält sich wie folgt:*:::

*:::

*:::

Ich würde gern auf die Enter-Taste als solche reagieren. Gibt es die Möglichkeit, diese nicht automatisch zum Schließend des DropDown-Controls zu verwenden?

Auch PreviewKeyDown bringt keinen Erfolg. Beim Drücken der Enter-Taste kommt das Event gar nicht erst beim Control an.

Vielleicht kann man das Control auch anders anzeigen? Ich mache es derzeit mittels

editorService.DropDownControl(control);

.

Hinweis: Ich habe das Beispiel als Code (VS 2008 Projekt) und kompiliert vorliegen ; sämtlicher Code zur Validierung, Lokalisierung etc. wurde entfernt. Ich hänge es gern als Anhang in einen weiteren Post.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo snoop83,

im Zweifel musst du WndProc überschreiben und die Nachrichten schon dort abfangen.

herbivore

4.931 Beiträge seit 2008
vor 13 Jahren

Für Key- bzw. Input-Events sollte man besser PreProcessMessage bzw. ProcessCmdKey überschreiben.

S
snoop83 Themenstarter:in
46 Beiträge seit 2006
vor 13 Jahren

Danke für die schnelle Antwort.

Ich habe es jetzt so gelöst:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
	if (keyData == Keys.Enter)
	{
		this.mOkClicked = true;
		this.EditorService.CloseDropDown();
		return true;
	}
	return false;
}

Das ganze habe ich in dem Control das beim PropertyGrid aufklappt gemacht, d.h. egal wo ich bin, wann immer Enter gedrückt wird, soll das Control geschlossen werden und der Status gemerkt werden, dass der Nutzer "auf ok geklickt" hat ( = Enter drücken ).

Geht ihr mit dem Code konform?