Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用按钮事件在C#中切换表单_C#_.net_Winforms - Fatal编程技术网

如何使用按钮事件在C#中切换表单

如何使用按钮事件在C#中切换表单,c#,.net,winforms,C#,.net,Winforms,我这里有一些代码: private void button1_Click(object sender, EventArgs e) { Application.Run(new Form3()); } 虽然我不认为这是您更改表单的方式,但当我运行它时,它抛出了一个错误,指出: 在服务器上启动第二个消息循环 单线程不是有效的操作 您不能使用应用程序。运行-这是用于启动windows窗体应用程序(应用程序中所有窗体共享的内部消息循环),而不是用于显示窗体。每个表单都有Show和Hide方法,因

我这里有一些代码:

private void button1_Click(object sender, EventArgs e)
{
    Application.Run(new Form3());
}
虽然我不认为这是您更改表单的方式,但当我运行它时,它抛出了一个错误,指出:

在服务器上启动第二个消息循环 单线程不是有效的操作


您不能使用
应用程序。运行
-这是用于启动windows窗体应用程序(应用程序中所有窗体共享的内部消息循环),而不是用于显示窗体。每个表单都有
Show
Hide
方法,因此您只需调用:

private void button1_Click(object sender, EventArgs e)
{
    Form3 f = new Form3(); // This is bad
    f.Show();
}

但您不应该在每次要显示表单时都创建表单。如果您只想拥有表单的一个实例,则应将其保持为全局,并且仅在需要时显示或隐藏。否则,您必须调用
Close
而不是
Hide
,以清除表单消耗的所有资源。

您可以简单地执行以下操作:

test mp = new test();
mp.Text = " Welcome Mr." + textBox1.Text;
this.Hide();
mp.ShowDialog();
this.Close();
你的新表格在哪里 然后,如果您将变量传递到另一个表单,只需将您的变量作为公共变量,就可以:

 mp.Text = " Welcome Mr." + textBox1.Text;

然后showdialog显示新表单并关闭旧表单。

您的第一个表单应在第一次使用时创建第二个表单,并将其隐藏在视图中。然后,当您切换回时,第二个窗体将隐藏自己并显示第一个窗体。像这样的

  private Form _firstForm;
  private Form _secondForm;

  private void switchToSecond_Click(object sender, EventArgs e)
  {    
      if (_secondForm == null)
          _secondForm = new SecondForm();

      Hide();
      _secondForm.Show();
  }

  private void switchToFirst_Click(object sender, EventArgs e)
  {    
      Hide();
      _firstForm.Show();
  }
您可以在第一个表单类的构造函数内将此值分配给第一个表单,因为这是主表单,所以它将始终在应用程序启动时创建。如果要保存资源,也可以在切换回第一个窗体时丢弃第二个窗体,以便在每次切换时重新创建它。

this.Hide();//隐藏当前窗体。
菜单菜单=新菜单();//创建新窗体的新实例。
menu.Show();//表现出来

假设您有
Form1
Form2
如果需要,您的范围不清楚

  • Form1
    Form2
    之间切换,并使两者保持活动状态

  • 一次只保留
    Form1
    Form2

  • 对于案例1,简单的
    Form1.Hide()和Form2.Show()
    就足够了

    对于案例2,解决方案将有点复杂

  • 创建自己的
    ApplicationContext MyAppCxt=new ApplicationContext()
    实例
  • 而不是默认的
    Program.Run(Form1)
    call
    Program.Run(MyAppCxt(Form1))
  • 在某个事件的处理程序中,当您需要切换
    Form1
    Form2

    form2f2=newform2()//创建新表单
    MyAppCxt.MainForm=f2//将Form2设置为消息队列中的MainForm
    Form2.Close()//关闭Form2并释放所有资源
    F2.Show()//向用户显示Form2
    

  • 当需要在
    Form2
    Form1

    之间切换时,会重复相同的场景,只需
    (新的Form3())。Show()
    ?可能重复