2011-04-06 89 views
0

我想能够显示,隐藏或关闭一种形式内的一些其他形式。这个想法是我的程序从一个表单开始,并且有一些按钮会显示其他表单。也就是说,如果用户点击一个按钮来引入另一个表单,此主表单应该最小化,并且每当用户关闭另一个表单时,此表单将恢复到正常或最大化状态。控制多种形式显示,隐藏或关闭一种形式在C#

的代码看起来像这样对控制其他形式(Form1.cs中)我的主要形式有:

namespace MultipleForms 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    /* 
    * I want to make a public reference to this Form1 
    * So that when user closes Form2 That is F2 this form will be 
    * set back to normal or maximized state 
    */ 

    private void buttonStartForm2_Click(object sender, EventArgs e) 
    { 
     //Declare Form2 
     Form2 F2 = new Form2(); 

     //Show Form2 
     F2.Show(); 

     //Minimize Form1 
     this.WindowState = FormWindowState.Minimized; 

    } 
} 
} 

这是Form2.cs

namespace MultipleForms 
{ 
    public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     //FormClosed event handler 
     private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      //Closing Form2 
      this.Close(); 

      //Now I need a code to make Form1 to recover from minimized 
      // state to normal or maximized state. how do I should refer to it? 
     } 
    } 
} 

我想我必须做一些表单关闭事件的东西,但我怎么能初始化Form1.cs作为公共的东西?或者我也应该在Form2.cs中初始化Form1.cs?

namespace MultipleForms 
{ 
static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
} 
} 

PS:这是crtitical该窗体2应该被关闭,没有墙根

UPDATE

使用汉斯的解决方案,它是或者它应该通过Program.cs的文件来实现最好使用这样说:

private bool isEnabledCmpFrm = false; 

    public void buttonStartComparisonForm_Click(object sender, EventArgs e) 
    { 

     if (!isEnabledCmpFrm) 
     { 
      ComparisonForm CmpFrm = new ComparisonForm(); 
      CmpFrm.Show(); 
      CmpFrm.WindowState = FormWindowState.Normal; 
      this.WindowState = FormWindowState.Minimized; 

      isEnabledCmpFrm = true; 

      CmpFrm.FormClosed += delegate 
      { 
       this.WindowState = FormWindowState.Normal; 
       isEnabledCmpFrm = false; 
      }; 
     } 
    } 

回答

1

没有窗体倾听自己的事件。该代码需要在Form1中进行。就像这样:

 Form2 F2 = new Form2(); 
     F2.FormClosed += delegate { this.WindowState = FormWindowState.Normal; }; 
     F2.Show(); 
     this.WindowState = FormWindowState.Minimized; 
+0

感谢这很好,但每次我点击按钮选择一个窗体来显示,它会运行该窗体(窗体的同一个实例,但具有不同的窗口)。我怎样才能将它限制为1格式?除非已打开的表单已关闭,因此应再次创建新的表单实例。 – 2011-04-07 08:29:00

+0

开始一个新问题。 – 2011-04-07 11:16:03

2

如果我理解正确的话,你可以连接到窗体Closing事件。

因此,在您的主要形式,你可以这样做:

Form2 form2 = new Form2(); 
form2.Show(); 
form2.FormClosing += new FormClosingEventHandler(form2_FormClosing); 


    void form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     this.Show(); 
    } 
+0

忽略我的答案,这一个更有意义。主窗体的状态逻辑保持主窗体。 – digitlworld 2011-04-06 21:08:05

+0

@Digitlworld然后考虑删除你的答案。 – 2015-12-18 07:06:29

0

您需要时再次传递引用到主窗体的子窗体使用主窗体的显示方法以使其可见孩子的形式正在关闭。