Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
PropertyGrid - DropDownControl - Entertaste als Bestätigung
snoop83
myCSharp.de - Member



Dabei seit:
Beiträge: 46

Themenstarter:

PropertyGrid - DropDownControl - Entertaste als Bestätigung

beantworten | zitieren | melden

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:
  • ENTER -> Event nicht ausgelöst, Control wird geschlossen
  • SHIFT + ENTER -> Event ausgelöst, alles ok
  • STRG + ENTER -> Event ausgelöst, alles ok


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.
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von snoop83 am .
Attachments
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo snoop83,

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

herbivore
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Für Key- bzw. Input-Events sollte man besser PreProcessMessage bzw. ProcessCmdKey überschreiben.
private Nachricht | Beiträge des Benutzers
snoop83
myCSharp.de - Member



Dabei seit:
Beiträge: 46

Themenstarter:

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von snoop83 am .
private Nachricht | Beiträge des Benutzers