在C#中的多种形式之间切换
本文关键字:之间 多种形式 | 更新日期: 2023-09-27 18:28:35
我正在开发一个C#(紧凑框架)应用程序,我需要有3个表单。我可以从一级(主)到二级,从一级到三级。我还希望能够从中二转换到中三。Form3必须始终相同(我需要在应用程序启动时创建它,并在应用程序结束时关闭它)。
在表格1上,在"转到表格2"按钮上
form2.Show(); form2.BringToFront();
在表格1上,在"转到表格3"按钮上
form3.Show(); form3.BringToFront();
在表格2上,在"返回表格1"上
this.Hide();
在表格3上,在"返回表格1"上
this.Hide();
但是如何从中二转换到中三呢?
谢谢你的帮助!
我认为这里有一个多部分的解决方案。
- 首先,如果你的form3是一个"全局"表单,不应该被重新实例化,那么你应该把它作为一个静态的内部变量存储在某个地方,以便于引用
- 当form1打开form2时,应该挂接FormClosed事件
- 在表单2中,当用户单击按钮(或其他任何按钮)时,关闭表单2
- 在事件处理程序中,对于FormClosed,重新显示全局form3
感谢您的贡献!我最终构建了一个可以扩展到多种形式的灵活解决方案。
当应用程序启动时,我会创建所有必需的表单。我有一个辅助类,它有一个(全局)变量,用于保存当前活动表单(我使用了int,但它可能是一个具有表单名称的字符串)。
static class GlobalClass
{
private static int m_currentActiveForm = 1;
public static int currentActiveForm
{
get { return m_currentActiveForm; }
set { m_currentActiveForm = value; }
}
}
在form1上,我包含了一个计时器,它每100毫秒检查一次var currentActiveForm。当检测到变化时,将显示相应的表格。
private void timer2_Tick(object sender, EventArgs e)
{
if (GlobalClass.currentActiveForm != lastActiveForm)
{
switch (GlobalClass.currentActiveForm)
{
case 1:
form2.Hide();
form3.Hide();
this.BringToFront();
break;
case 2:
form2.Show();
form2.BringToFront();
break;
case 3:
form3.Show();
form3.BringToFront();
break;
}
}
}
然后,在任何表单上,要切换到新表单,我只需要为GlobalClass.currentActivitForm分配一个新值,该值在所有表单中都可见。
在表单2上,单击"转到表单3"按钮
form3.Show();
在表格3上,点击"返回表格2"按钮
this.Hide();