VS 2010 Express: Mit ShowDialog geöffnete Form per Programm schliessen

brunlorenz

*C* & Windows-Freak
Hallo, ich öffne in meinem Programm mit ShowDialog eine Form.
Diese möchte ich, wenn auf "OK" gedrückt wird, wieder schliessen.
Nur weiss ich nicht, wie man eine Form wieder versteckt :(
 
Am einfachstes ist es, wenn du diesen OK-Button auch als solchen kennzeichnest.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.acceptbutton.aspx
Wenn du die "AcceptButton"-Eigenschaft der Form auf den Button setzt (geht auch im Eigenschafts-Fenster in VS), wird der Dialog beim Klick darauf mit "DialogResult.OK" geschlossen.

Wenn du es selbst machen willst, musst du im Click-Handler des Buttons die Form mit "this.Close()" schließen und vorher am besten noch "DialogResult.OK" setzen.

Und bei solchen Fragen schadet ein Blick in die Dokumentation nie!
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx
 
OK, aber es schliesst nicht :(
ich habe Close und AcceptButton versucht,
bei beiden passiert nichts
Grüsse,
Lorenz
 
Also grundsätzlich ist die System.Windows.Forms.Form.Close()-Methode die richtige Variante. Damit natürlich was aufgerufen wird in deinem Button musst du erstmal dem sagen, welche Funktion denn beim Klicken aufgerufen werden soll. Dazu gehst du in den Designer, drückst auf den Button, bei den Properties gehst du oben auf den gelben Pfeil und da findest du auch das Ereignis "Click". Da doppelklickst du in das leere Feld und eine Methode wird generiert. Darin kannst du jetzt Close() schreiben. (Einfachere Möglichkeit: Doppelklick auf den Button im Designer machen, da Click das Standardereignis für den Designer ist bei Buttons).

PS:
Da es sich hier um .NET handelt bist du wohl da im Bereich .NET Windows Forms besser aufgehoben ;)
 
Der Code:
C++:
			this->button1->Location = System::Drawing::Point(16, 55);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(75, 23);
			this->button1->TabIndex = 1;
			this->button1->Text = L"OK";
			this->button1->UseVisualStyleBackColor = true;
			this->button1->Click += gcnew System::EventHandler(this, &Eigenschaften::label1_Click);
			// 
			// Eigenschaften
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->AutoSize = true;
			this->ClientSize = System::Drawing::Size(127, 84);
			this->ControlBox = false;
			this->Controls->Add(this->button1);
			this->Controls->Add(this->label1);
			this->MaximumSize = System::Drawing::Size(143, 122);
			this->MinimumSize = System::Drawing::Size(143, 122);
			this->Name = L"Eigenschaften";
			this->Text = L"Eigenschaften";
			this->Load += gcnew System::EventHandler(this, &Eigenschaften::Eigenschaften_Load);
			this->ResumeLayout(false);
			this->PerformLayout();
			this->AcceptButton=button1;
 
Zuletzt bearbeitet von einem Moderator:
Nein, du verwendest nicht direkt C++. Was du verwendest ist die C++-Variante von .NET ;)

Komisch an deinem Code ist die folgende Zeile:
C++:
this->button1->Click += gcnew System::EventHandler(this, &Eigenschaften::label1_Click);

Beim Klicken auf den Button1 wird also die label1_Click-Funktion ausgeführt? Wie sieht die denn aus?
 
Zurück