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.
Ja. Vor der InitializeComponent wurden noch nicht alle Steuerelemente erstellt.
Der button
, textbox
, combobox
, den Sie auf Form
setzen, erstellt automatisch einen Code. Dieser Code wird in InitializeComponent()
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
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.
Tags und Links c# visual-studio-2010 winforms