Laden...

Im Leave Control Event herausfinden welches Control fokussiert wird

Erstellt von baer999 vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.297 Views
Thema geschlossen
B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 12 Jahren
Im Leave Control Event herausfinden welches Control fokussiert wird

Hallo,

ich habe eine TextBox für Eingabe von ArtikelNummern, dabei wird zusätzlich eine DataGridview angezeigt, welche alle möglichen Artikelnummern anzeigt direkt unter der Eingabe-Textbox.

Im Leave Event der Textbox wird die DataGridview auf Visible false gesetzt, da sie nur angezeigt werden soll, wenn der Fokus auf der Textbox liegt.

Allerdings soll es möglich sein, in die Datagridview klicken zu können, damit man dort per Maus die Artikel per Doppelklick selektieren kann.

Doch durch das Leave Event mit dem unsichtbar setzen der Datagridview, wird diese bei anklicken eben direkt unsichtbar, da die Textbox den Fokus verloren hat.

Hat jemand eine Idee, wie ich im Leave Event herausfinden kann, welches Control ab sofort fokussiert wird (dann könnte ich nach der Datagridview abfragen und diese dann eben nicht unsichtbar werden lassen...)

Oder gibt es andere Ansätze für mein Problem?

Ich hoffe die Thematik ist in diesen paar Zeilen nachzuvollziehen, ich habe mal zum besseren Verständnis einen Screenshot angehängt!

Danke!

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo baer999,

verwende statt des Leave der TextBox das Enter aller anderen Controls außer des DataGridViews und der TextBox. Du kannst ein und denselben EventHandler verwenden und ihn in einer Schleife für alle Controls registrieren.

herbivore

C
2.122 Beiträge seit 2010
vor 12 Jahren

Ein ganz anderer Ansatz für die Situation wäre, die Eingabe oder Auswahl des Artikels als eigenen Schritt im Ablauf anzusehen. Solange kein Artikel vollständig ausgewählt ist, bleibt das Grid sichtbar. Der Schritt ist erst dann beendet, wenn entweder im Grid was gewählt wurde, oder eine vollständige Nummer im Feld eingegeben wurde. Dann wird das Grid versteckt.

Das Verstecken des Grids wäre damit eindeutig an eine komplette Artikelnummer im Textfeld gebunden. Wahrscheinlich wird bei Klick ins Grid ja sowieso die Nummer im Textfeld ergänzt, somit wäre das gar nicht so schwer zu implementieren und hängt nicht an allen anderen Eingabefeldern.

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 12 Jahren

Beide Ideen haben sind für mich denkbar, ich bin jetzt auf der Suche, nach der schnelleren bzw. GUI-freundlicheren Lösung.

Allerdings finde ich es relativ umständlich, alle Controls zu loopen, um sie an ein ENTER Event zu binden und bei Schließen der Bestellung nochmal alle "abzumelden" vom EventHandler. Ist das performance-technisch, nicht extrem aufwendig bei 50-100 Controls und mehr auf der Form?
Allerdings wäre es genau das, was ich mir vorstelle vom verstecken der GridView bei Verlassen der Artikel-Nr.-Textbox bzw. der GridView in ein anderes Control.

Zur letzten Lösung, es als einzelnen Prozess zu betrachten, halte ich auch viel, allerdings würde, wenn der Fokus bspw. auf der Anzahl der Artikel steht, die GridView auch angezeigt werden, obwohl die Artikelanzahl ja nicht direkt mit der Artikelnummer verknüpft ist.
Das würde allerdings das aufwendige EventHandling umgehen...

Eine Alternative, welche beide Vorzüge verbindet gibt es sonst nicht mehr, oder hat jemand noch eine Idee?

thx

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo baer999,

Ist das performance-technisch, nicht extrem aufwendig bei 50-100 Controls und mehr auf der Form?

das ist weder vom Code noch von der Performance aufwändig. Das ist so ungefähr, als wenn du fragen würdest, ob es nicht total aufwändig wäre, in einer Schleife 100 Zahlen zu addieren oder sagen wir zu multiplizieren. Beachte immer: premature optimization is the root of all evil.

herbivore

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 12 Jahren

Ok gut, das klingt plausibel,
wie kann ich denn einen Loop über alle Controls einer Form machen? Denn nur ein Loop über Controls der Form, deckt ja leider nicht sämtliche Unter-Controls ab... thx

K
62 Beiträge seit 2009
vor 12 Jahren

Mit einer rekursiven Methode.

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 12 Jahren

Ok danke, ich versuche es mal...

Hinweis von herbivore vor 12 Jahren

Das kriegst du schon hin, es gibt ja massig Threads zu dem Thema.

Thema geschlossen