Benutzer mit den meisten Antworten
Programmstart: wie unterbinde ich events, die der code in designer.vb auslöst?

Frage
-
Moin,
habe festgestellt, dass events, die ich auf controls lege, schon gefeuert werden, wenn der code beim Programmstart noch im designer.vb abgearbeitet wird, zB ein radiobutton wird auf true gesetzt, weil ich das im Design schon so angegeben habe.
Dieses Ansprechen von events führt zum Teil zu unerwünschten Ergebnissen, da bestimmte Voraussetzungen dann erst im formload hergestellt werden.
Wie also erreiche ich, dass die events erst ansprechen, wenn meine Vorbereitungen abgeschlossen sind?
Vielen Dank!
TH
Antworten
-
Hi,
deine Schilderung lässt vermuten, dass Du ein unpassendes Programmdesign gewählt hast. Das Setzen von Startwerten ist üblicherweise nicht erforderlich. In dem Moment, wenn an die Steuerelemente die Datenobjekte gebunden werden, werden auch die Anzeigen entsprechend aktualisiert. Solange aus unterschiedlichen Gründen noch nicht gebunden wurde bzw. werden konnte, wird der äußere Container unsichtbar o.ä. gesetzt (z.B. ausgegraut), sodass der Anwender sofort sieht, dass die Angaben (z.B. Checkboxes ohne Häkchen) bedeutungslos sind. Bei strikter Trennung von Code und Design arbeitet die Programmlogik sowieso nur mit den Datenobjekten, deren Werte über die Bindung in der Oberfläche reflektiert werden.Ohne Dein Programmdesign zu kennen, ist es schwer, weitere Ratschläge zu geben.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 2. Oktober 2018 08:35
- Als Antwort markiert Migration Sucks Dienstag, 2. Oktober 2018 18:42
Alle Antworten
-
Hi,
was verstehst Du unter "Vorbereitungen abgeschlossen sind"? Im Programm werden Befehle in einem Thread immer hintereinander ausgeführt. Wo siehst Du da ein Problem, einen Befehl weiter "nach hinten zu schieben"?Wenn Du mit dem Designer arbeitest, so baut der Designer die Befehle in der Designer-Datei ein, die dann üblicherweise mit dem InitializeComponent aufgerufen werden. Den Wert des Radiobuttons kannst Du auch später z.B. im Form_Load auf true setzen, nachdem Deine "Vorbereitungen abgeschlossen sind".
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks -
Hi,
was verstehst Du unter "Vorbereitungen abgeschlossen sind"? IWo siehst Du da ein Problem, einen Befehl weiter "nach hinten zu schieben"?
Den Wert des Radiobuttons kannst Du auch später z.B. im Form_Load auf true setzen, nachdem Deine "Vorbereitungen abgeschlossen sind".
Danke Peter,
ich verwende ein treeview control, aus deren Ordner dann ein listview gefüllt wird. Es gibt unterschiedliche Optionen, Textfelder, comboboxen die bei Änderung ein neues Füllen des listview erzeugen. Daher gibt es sinnlose Reaktionen, wenn diese Ereignisse zu früh auftreten.
Ich weiß, dass ich das alles im Form.load erledigen könnte. Es ist halt einfach schneller, im Designer die Textboxen mir Startwerten zu füllen, Optionbuttons und checkboxen auf die Startsituation zu setzen und comboboxen zu füllen.
Zur ursprünglichen Frage: Ich habe das mit mycontrol.ishandlecreated versucht abzufangen, ist halt umständlich in all den subs.
Gruß TH
-
Hi,
deine Schilderung lässt vermuten, dass Du ein unpassendes Programmdesign gewählt hast. Das Setzen von Startwerten ist üblicherweise nicht erforderlich. In dem Moment, wenn an die Steuerelemente die Datenobjekte gebunden werden, werden auch die Anzeigen entsprechend aktualisiert. Solange aus unterschiedlichen Gründen noch nicht gebunden wurde bzw. werden konnte, wird der äußere Container unsichtbar o.ä. gesetzt (z.B. ausgegraut), sodass der Anwender sofort sieht, dass die Angaben (z.B. Checkboxes ohne Häkchen) bedeutungslos sind. Bei strikter Trennung von Code und Design arbeitet die Programmlogik sowieso nur mit den Datenobjekten, deren Werte über die Bindung in der Oberfläche reflektiert werden.Ohne Dein Programmdesign zu kennen, ist es schwer, weitere Ratschläge zu geben.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 2. Oktober 2018 08:35
- Als Antwort markiert Migration Sucks Dienstag, 2. Oktober 2018 18:42
-
Hi,
vermutlich hast du die Events im FormLoad-Ereignis stehen.
Versuche es mal im FormShown-Event.Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 and VB 2010 Express Be a good forum member - mark posts that contain the answers to your questions or those that are helpful. c# in vb Translator: http://www.developerfusion.com/tools/convert/csharp-to-vb/
-
@ Stefan: Nein, da stehen sie nicht.
@Peter: Mir ist das Ganze erst aufgefallen, als ich zu Testzwecken die app im Einzelschrittmodus gestartet habe. Da wurden dann plötzlich verschiedene .change-Ereignisse abgearbeitet, obwohl der Code noch gar nicht im Form.load war. In der designer.vb habe ich dann gesehen, dass hier Werte für controls gesetzt werden, was offenbar diese Ereignisse auslöst. Erst nach vielen durchlaufenen .change-events kommt dann der Code ins Form.load.
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 2. Oktober 2018 08:35