windowsforms fenster schliessen und anderes öffnen
-
ich will mein hauptfenster schliessen und statt dessen ein anderes fenster aufmachen. und später soll das wieder andersrum gehen.
ich hab schon viel rumprobiert und ich hab leider keine idee mehr.
ich arbeite mit visual studio . net 2003
thx
-
so sieht mein Hauptfenster aus was seinerseits ein Nebenfenster beinhaltet:
namespace _2FormsVisibleChange { /// <summary> /// Zusammenfassung für Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { // unser Nebenfenster private Form2 frm2; private System.Windows.Forms.Button button1; /// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.Container components = null; #region Vom Designer erzeugter Code 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.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(8, 8); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(112, 24); 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, 267); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Fenster 1"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); } #endregion /// <summary> /// Der Haupteinstiegspunkt für die Anwendung. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } #endregion // macht dieses Fenster unsichtbar und das Nebenfenster sichtbar private void button1_Click(object sender, System.EventArgs e) { this.Visible = false; this.frm2.Visible=true; } // erzeugt das Nebenfenster private void Form1_Load(object sender, System.EventArgs e) { this.frm2 = new Form2(this); this.frm2.Visible = false; } } }
Das Nebenfenster sieht dann so aus:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace _2FormsVisibleChange { /// <summary> /// Zusammenfassung für Form2. /// </summary> public class Form2 : System.Windows.Forms.Form { // Hier wird der Verweis auf das Hauptfenster gespeichert private System.Windows.Forms.Form parent; private System.Windows.Forms.Button button1; /// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.Container components = null; // wichtig bekommt einen Verweis auf das Hauptfenster public Form2(System.Windows.Forms.Form parent) { // // Erforderlich für die Windows Form-Designerunterstützung // InitializeComponent(); // // TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu // this.parent = parent; } /// <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.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(8, 8); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(112, 24); this.button1.TabIndex = 1; this.button1.Text = "button1"; this.button1.Click += new System.EventHandler(this.button1_Click); // // Form2 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 267); this.Controls.Add(this.button1); this.Name = "Form2"; this.Text = "Fenster 2"; this.ResumeLayout(false); } #endregion // hier wird dieses Nebenfenster wieder unsichtbar und stattdessen das hauptfenster wieder sichtbar private void button1_Click(object sender, System.EventArgs e) { this.Visible = false; this.parent.Visible = true; } } }
Wenn Du es aber anders willst Und das Fenster wirklch mit Cose
richtig schliessen willst -> Anwendung als beenden willst!Dann brauchst Du etwa folgende Funktionalität in Pseudocode ausgedrückt
[b]Anwendung1[/b].Button_Click [b]läuft Anwendung2 schon[/b] wenn [b]ja[/b] diese Anwendung einfach schliessen wenn [b]nein[/b] Anwendung 2 starten diese Anwendung einfach schliessen [b]Anwendung2[/b].Button_Click [b]läuft Anwendung1 schon[/b] wenn [b]ja[/b] diese Anwendung einfach schliessen wenn [b]nein[/b] Anwendung 1 starten diese Anwendung einfach schliessen
mfg sclearscreen
P.s.: Für die 2. Variante müsste man irgendwie mit ShellExecut arbeiten
und mit nem WinAPI - Aufruf der aber auch schon .NET implementiert sein
könnte um ne schon laufende Anwendung zu finden bezogen auf
meinen PseudoCode ->[b]läuft Anwendung1 schon[/b]
-
Für obige Variante wo der CSharp - Code steht,
musst Du noch im Projektmappen - Explorere
eine neue WindowsForm etc. hinzufügenmfg
-
Vorsicht aber wenn Du Fenster 2 richtig über das Kreuzschen schliesst kannst Du es nicht mehr
im Fenster 1 aktivieren man muss also noch am Dispose des fenster 2 auf dessen Disposed - Event reagieren und zwar im Code vom Hauptfenster!sorry habe ich jetzt nicht in der Schnelle bedacht!
mfg
P.S.: aber als Ansatz sollte es Dir genügen
-
Hier der verbesserte Code des Hauptfenster
namespace _2FormsVisibleChange { /// <summary> /// Zusammenfassung für Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { // unser Nebenfenster private Form2 frm2; private System.Windows.Forms.Button button1; /// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.Container components = null; #region Vom Designer erzeugter Code 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.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(8, 8); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(112, 24); 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, 267); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Fenster 1"; this.ResumeLayout(false); } #endregion /// <summary> /// Der Haupteinstiegspunkt für die Anwendung. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } #endregion // macht dieses Fenster unsichtbar und das Nebenfenster sichtbar private void button1_Click(object sender, System.EventArgs e) { // unser Nebenfenster Form2 frm2 = new Form2(this); // ebenfenster sichtbar machen frm2.Show(); // Hauptfenster verstecken this.Visible = false; } } }
So nun nochmal der Code des Nebenfenster
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace _2FormsVisibleChange { /// <summary> /// Zusammenfassung für Form2. /// </summary> public class Form2 : System.Windows.Forms.Form { // Hier wird der Verweis auf das Hauptfenster gespeichert private System.Windows.Forms.Form parent; private System.Windows.Forms.Button button1; /// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.Container components = null; // wichtig bekommt einen Verweis auf das Hauptfenster public Form2(System.Windows.Forms.Form parent) { // // Erforderlich für die Windows Form-Designerunterstützung // InitializeComponent(); // // TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu // this.parent = parent; } /// <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.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(8, 8); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(112, 24); this.button1.TabIndex = 1; this.button1.Text = "button1"; this.button1.Click += new System.EventHandler(this.button1_Click); // // Form2 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 267); this.Controls.Add(this.button1); this.Name = "Form2"; this.Text = "Fenster 2"; this.ResumeLayout(false); } #endregion // hier wird dieses Nebenfenster wieder unsichtbar und stattdessen das hauptfenster wieder sichtbar private void button1_Click(object sender, System.EventArgs e) { // Hauptfenster sichtnar machen this.parent.Visible = true; // dieses Nebenfenster was eigentlich nen Dialog ist, als diesen // auch beenden this.Close(); } } }
Und wie gesagt sollen beide Fenster als wirklich eigenständige Anwendung laufen
dann musst Du meinen geschilderten Pseudocode konkret umsetzenmfg