Also ich habe folgendes Problem: Ich möchte wenn ich auf einen Button clicke ein anderes Formular öffnen und das jetzige schließen und von dem anderen Formular aus das ganz wieder rückwärts. Müsste eigentlich ganz leicht sein, aber ich krieg's irgendwie nicht hin.
Etwa so:
Form1:
private void button1_Click(object sender, System.EventArgs e)
{
Form frm=new Form2();
frm.Show();
this.Hide();
}
Form2:
private void button1_Click(object sender, System.EventArgs e)
{
Form frm=new Form2();
frm.Show();
this.Hide();
}
MfG
Bewareofthis
Funktioniert. Vielen Dank. Aber noch was dazu. Gibt's bei C# eigentlich auch sowas wie bei VB die form_unload methode, und wenn ja wie kann ich die bearbeiten?? Dadurch, dass ich jetzt 2 Formulare geladen hab beendet der nämlich nicht mehr komplett wenn ich eins der Fenster schließe. Und das andere ist ja hidden. Hoffe ich hab mich einigermaßen klar ausgedrückt.
Wenn beide Forms schliessen sollen brauchst du das Form2_Closed-Event
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace WindowsApplication57
{
/// <summary>
/// Zusammenfassung für Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.Container components = null;
Form frm=new Form2();
public Form1()
{
//
// Erforderlich für die Windows Form-Designerunterstützung
//
InitializeComponent();
//
// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
//
}
/// <summary>
/// Die verwendeten Ressourcen bereinigen.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.frm.Closed +=new EventHandler(frm_Closed);
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(96, 184);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
frm.Show();
this.Hide();
}
private void frm_Closed(object sender, EventArgs e)
{
this.Close();
}
}
Gibt's da kein vorgefertigtes, was ich irgendwie einfügen kann? Es gibt doch auch nen form_load.
Wäre für mich viel praktischer.
Versuch doch mal anstatt das zweite Formular auszublenden, es zu schließen:
this.Close();
Vielleicht bringt das eher den gewünschten Erfolg...
Sehe grad, dass das oben schon gepostet wurde...vielleicht sowas:
Application.Exit();
Bei mir funktioniert das...
Greets - SK
Sagte ich schon Danke? Nein? ...kommt noch...
Also mit Close() löscht er das Formular nicht aus dem speicher und mit application.exit beendet er ja das ganze programm. das soll er aber nur wenn man auf das schließen symbol clickt. Deshalb bräuchte ich das entsprechende ereignis , in dass ich das reinschreiben kann.
Frag noch ab wer das Closing Auslöst :
private void button1_Click(object sender, System.EventArgs e)
{ test=false;
this.Close();
}
private void Form2_Closing(object sender, CancelEventArgs e)
{
if (test)Application.Exit();
}
private void Form2_Load(object sender, System.EventArgs e)
{
test=true;
}
MfG
Bewareofthis
wenn ich das jetzt richtig verstanden hab kann man doch auch die Form die du schließen möchtest als parameter für Application.Exit() übergeben.
ungefähr so:
Application.Exit(form die du schließen möchtest);
@Shady: geht bei mir nicht. oder ich bin zu doof, was natürlich acuh möglich wär.
@Bewareofthis: versteh nicht so ganz was du mir damit sagen willst
Also Form1 :
private void button1_Click(object sender, System.EventArgs e)
{
this.Hide();
Form frm=new Form2();
frm.ShowDialog();
frm.Close();
this.Show();
}
Form2 :
public bool test=false;
private void button1_Click(object sender, System.EventArgs e)
{ test=false;
this.Close();
this.Dispose();
}
private void Form2_Closing(object sender, CancelEventArgs e)
{
if (test)Application.Exit();
}
private void Form2_Load(object sender, System.EventArgs e)
{
test=true;
}
Mit dem Bool entscheidest du dann nur ob Form2 geschlossen werden soll oder das Programm !
ja, sorry, ich hab mist gelabbert. so funktioniert das auch nicht. 🙂
das was bewareofthis da gemacht hat ist mit sicherheit die schönere lösung aber, so tuts auch:
ich hab mal ein bischen rumprobiert...
1.Form: Form1
2.Form: Form2
In der Form1 hab ich einen Button.
Der "sieht" so aus:
private void button1_Click(object sender, EventArgs e)
{
Form2 MyForm = new Form2();
MyForm.ShowDialog();
}
Wenn man dann auf den Button klickt kommt eine neue Form: Form2. Ich weis nich wie das is mit dem ausn speicher löschen und so, aber es tut 🙂
das is auch mist...
beachte mich am besten einfach gar nicht 😁