Laden...

Anderes Formular öffnen bzw. schließen

Erstellt von Scarface vor 19 Jahren Letzter Beitrag vor 19 Jahren 3.062 Views
S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 19 Jahren
Anderes Formular öffnen bzw. schließen

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.

B
59 Beiträge seit 2005
vor 19 Jahren

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

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 19 Jahren

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.

B
1 Beiträge seit 2005
vor 19 Jahren

Das müsste der Dispose Event sein.

B
59 Beiträge seit 2005
vor 19 Jahren

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();
		}
	}

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 19 Jahren

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.

S
238 Beiträge seit 2004
vor 19 Jahren

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...

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 19 Jahren

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.

B
59 Beiträge seit 2005
vor 19 Jahren

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

S
42 Beiträge seit 2005
vor 19 Jahren

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);

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 19 Jahren

@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

B
59 Beiträge seit 2005
vor 19 Jahren

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 !

S
42 Beiträge seit 2005
vor 19 Jahren

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 🙂

S
42 Beiträge seit 2005
vor 19 Jahren

das is auch mist...
beachte mich am besten einfach gar nicht 😁