Events liefern Unterschied
-
Hallo zusammen!
Ich habe eine Funktion
ShowOverview()
. In dieser binde ich beim Aufruf der Form meine Daten und lasse diese auch anzeigen - u.a. in einer DataGridView.
Auf der Form befindet sich zudem ein TabControl welches zu Beginn nur eine Page anzeigt, d.h. manche Tabs sind zu Beginn ausgeblendet. Wenn ich von dort wieder auf mein Start-Tab kommen möchte, rufe ich erneut die FunktionShowOverview()
auf.Damit beim Anzeigen der Daten kein Datensatz markiert ist, rufe ich am Ende der
ShowOverview()
FunktiondgPositions.ClearSelection();
auf und "leere" auch eine Combobox (cbCustomer.Text = "";
).Nun habe ich das Problem, dass beim Aufruf der Funktion im
Form_Load
Event sowohl ClearSelection als auch Text = "" nicht ausgeführt wird. Es steht am Ende der Funktion, daRufe ich die Funktion von einer TabPage per Buttonklick auf, wird kein Datensatz markiert und der Text geleert. Weshalb??
Und vor allem - wie kann ich das Problem lösen??private void ShowOverview() { ShowPositions(); ColorGridPositions(); cbCustomer.SelectedIndexChanged -= cbCustomer_SelectedIndexChanged; ShowCustomer(); cbCustomer.SelectedIndexChanged += cbCustomer_SelectedIndexChanged; cbCustomer.Text = ""; dgPositions.ClearSelection(); }
-
Kann es sein, daß dort eine Exception (z.B. in ShowCustomer) erzeugt wird, denn Form_Load fängt intern jede Exception?
Benutze am besten den Debugger dazu.
-
In der Regel kommen in das Form-Load nur Initialisierungen. Zugriffe auf das GUI sollten frühestens im Form-Shown ausgeführt werden. Im Zweifel ist das Fenster-Handel im Load ja noch garnicht vorhanden.
-
Beim Aufruf der Form lasse ich gleichzeitig zwei (von sechs) TabPages anzeigen.
Nun habe ich heraus gefunden, dass die TabPage, die ich als zweites wieder zum Anzeigen hinzufüge (Aufruf innerhalb meinerShowOverview()
, den "Focus" hat und dort meindataGridView1.ClearSelection();
bzw.combobox1.Text = "";
ignoriert wird.tabControlOverview.TabPages.Clear(); tabControlOverview.TabPages.Add(tabPageOverview); tabControlOverview.TabPages.Add(tabPagePositions);
Gibt es noch eine andere Möglichkeit, wie ich die restlichen Pages ausblenden kann und zu Beginn nur diese beiden anzeigen lasse?
Hab nun meine Funktion auch ins Form_Show Ereignis gepackt. Ändert aber nichts am Problem, ist aber nach deinem Hinweis vermutlich sinnvoller!
-
Wobei beim Button_Click ja das selbe mit dem TabControl bzw. den TabPages durchgeführt wird und es da funktioniert.
-
Dies wird dein Problem lösen: [FAQ] Bestimmte Aktionen bis nach der laufenden GUI-Event-Behandlung verzögern