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ügen

    mfg



  • 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 umsetzen

    mfg


Anmelden zum Antworten