如何在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。
如果有此功能的代码项目,请分享链接。
感谢您的宝贵时间。
嗯,这是一个棘手的问题。据我所知,没有什么好办法。这里有几个选项:
- 你可以使用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个。如果我没理解错的话。或者更优雅的解决方案是使用用户控件。