Wo sollte InitializeComponent () in der Reihenfolge des Codes angezeigt werden?

8

Wenn ich ein winForms "myForm" erstelle, wird der folgende Kesselblechcode erzeugt:

%Vor%

Wenn ich der Konstruktormethode zusätzlichen Code hinzufüge, macht es einen Unterschied für die Ausführung der App, wenn ich meinen Code an Position 1 oder 2 platziere?

    
whytheq 15.08.2012, 08:02
quelle

5 Antworten

12

Ja, tut es.

InitializeComponent ist die von VS generierte Methode, die für das Erstellen und Positionieren der Steuerelemente in einem Formular verantwortlich ist.

Code in "Position 1" wird ausgeführt, bevor die Steuerelemente vorhanden sind. Wenn Sie versuchen, auf ein Steuerelement in dieser Position zuzugreifen, erhalten Sie NullReferenceException (wenn Sie beispielsweise versuchen, den Inhalt von TextBox festzulegen). Ein ähnlicher Code in "Position 2" funktioniert wie erwartet.

Es wird jedoch für "Position 1" verwendet: Wenn Sie benutzerdefinierte Steuerelemente oder Verhaltensweisen haben, die auf den Eigenschaften Ihres Formulars beruhen, kann das Festlegen dieser Eigenschaften in "Position 1" dazu führen, dass der Code nicht aktualisiert werden muss, wenn Sie Steuerelemente zulassen erstellt, bevor diese Werte festgelegt sind.

    
Dan Puzey 15.08.2012, 08:07
quelle
2

Ja. Vor der InitializeComponent wurden noch nicht alle Steuerelemente erstellt.

    
Amiram Korach 15.08.2012 08:07
quelle
1

in der Funktion InitializeComponent (); Sie erstellen alle Objekte, die Sie in das grafische Layout eingefügt haben. Wenn Sie darauf zugreifen möchten, sollte Ihr Code in Position2 sein.

    
elyashiv 15.08.2012 08:07
quelle
0

Der button , textbox , combobox , den Sie auf Form setzen, erstellt automatisch einen Code. Dieser Code wird in InitializeComponent()

generiert

Das Aufrufen der Steuerelemente, die Sie aus position 1 auf Formular anwenden, ist daher falsch , da die Steuerelemente niemals an diesem Punkt des Codes erstellt werden.

Sie können die Steuerelemente aufrufen und darauf zugreifen, die Sie über position 2

in das Formular eingegeben haben     
Anirudha 15.08.2012 08:55
quelle
0

Wie die anderen hier gesagt haben, sollte in den meisten Fällen Position 2 verwendet werden. Es gibt jedoch Ausnahmen, bei denen keine der Positionen funktioniert, und Sie müssen Ihren Code tatsächlich an ein anderes Ereignis anhängen.

Beispiel: Sie haben einen ScrollViewer und ein Bild darin. Sie fügen eine große Bilddatei in die Komponente Bild ein und möchten sie so anzeigen, dass die Bildmitte zu Beginn sichtbar ist, und Sie können mit der Option blättern, um den Rest des Bilds zu sehen:

%Vor%

Wenn Sie dies jedoch im Konstruktor vor oder nach InitializeComponent () (oder sogar in) schreiben, erhalten Sie nicht das gewünschte Ergebnis. (Weil, obwohl die Komponenten zu diesem Zeitpunkt initialisiert wurden, die enthaltene Image-Datei nicht.) Stattdessen müssen Sie einen neuen Event Handler ImageOpened anhängen zu Image und schreibe den Befehl dort.

    
Zael 18.02.2016 11:24
quelle

Tags und Links