如何在c# . net中替换多个表单

本文关键字:替换 表单 net | 更新日期: 2023-09-27 18:09:08

我有一个MainForm, form2和form3在我的c#。. Net应用程序和MainForm中的两个按钮。

按钮名称为form2和form3。

当我点击MainForm中的form2按钮时,我希望form2取代MainForm的UI。请注意,我并没有试图导航到另一个表单。

同样:当我点击MainForm中的form3按钮时,form3的UI将替换现有的MainForm的UI。

如果有此功能的代码项目,请分享链接。

感谢您的宝贵时间。

如何在c# . net中替换多个表单

嗯,这是一个棘手的问题。据我所知,没有什么好办法。这里有几个选项:

    你可以使用ApplicationContext类,并在运行时为应用程序设置一个新的主表单。这允许你在显示新窗口时关闭主窗口,而不关闭整个应用程序。
  • 在显示新窗口之前隐藏主窗口。
  • 可以隐藏属于初始屏幕的控件,并取消隐藏属于新窗口的控件。(这样做的一个稍微好一点的方法是在不同的类中单独设计窗口,然后不是显示它们,而是将控件复制到当前窗体中。)

你为什么要这样做?

将UI放在UserControls中,而不是form。

在你的主表单上,添加一些逻辑来加载UserControl。通过控件上的按钮,您可以调用一个方法,该方法将正确的控件放置在表单中。

例如:

 public class MyForm : Form {
      Control body;
      public void HandleUserAction(string action) {
          if (body != null) this.Controls.Remove(body);
          if (action == "goto1") {
             body = new MyUserControl();
          }
          // Handle other actions
          if (body == null) return;
          this.Controls.Add(body);
      }
 }
 // In your control
 public MyCtl : UserControl {
       public void Button1_Click(object sender, EventArgs e) {
           ((MyForm)FindForm()).HandleUserAction("goto1");
       }
 }

您正在尝试制作向导吗?

如果没有,或者你对不同的表单有不同的设计:

创建一个类,右键单击Visual Studio中的Project> New Item,粘贴如下:

class form
{
    //Needs simple editing...
    public static Form1 form1 = new Form1();
    public static Form2 form2 = new Form2();
    public static Form3 form3 = new Form3();
    public static Form4 form4 = new Form4();
    public static Form5 form5 = new Form5();
}

并在要更改表单的地方输入以下代码:

//This will make show another form on the existing form's location
form.form2.Show();
form.form2.Location = this.Location;
this.Hide();

肯定不是专业答案,但可能会有所帮助。

你可以把你所有的主要形式,form2和form3的内容在一个面板容器(如panelmain, panel2, panel3)。在按钮点击事件,只需删除Panelmain从form1和添加panel2或panel3根据需要。

For button from

private void btnForm2_Click(object sender, EventArgs e)
{
    Panelmain.Enabled = false; // optional
    this.Controls.Remove(Panelmain);
    Panel2.Enabled = true; // optional
    this.Controls.Add(Panel2);
}

For button from3

private void btnForm3_Click(object sender, EventArgs e)
{
    Panelmain.Enabled = false; // optional
    this.Controls.Remove(Panelmain);
    Panel3.Enabled = true; // optional
    this.Controls.Add(Panel3);
}

一个不太好的方法,但需要最少的编码是使用面板。

创建3个面板,将内容放入每个面板。让其中两个同时不可见

你可以使用面板。创建3个面板并在需要时隐藏2个。如果我没理解错的话。或者更优雅的解决方案是使用用户控件。