C#中的多个窗体之间的切换
Switching between multiple forms in C#
我正在开发一个 C#(紧凑型框架)应用程序,我需要 3 个表单。我可以从 form1(主)到 form2,从 form1 到 form3。我还希望能够从 form2 切换到 form3。 Form3 必须始终相同(我需要在应用程序启动时创建它并在应用程序结束时关闭它)。
在 form1 上,在 "Go to form 2" 按钮上
form2.Show(); form2.BringToFront();
在 form1 上,在 "Go to form 3" 按钮上
form3.Show(); form3.BringToFront();
在 form2 上,在 "Back to form 1"
上
this.Hide();
在 form3 上,在 "Back to form 1"
上
this.Hide();
但是如何从 form2 切换到 form3 呢?
感谢您的帮助!
我认为这里有一个多部分解决方案。
- 首先,如果您的 form3 是 "global" 表单而不应该是 re-instantiated,那么您应该将其作为静态内部变量存储在某处以便于参考。
- 当 form1 打开 form2 时,您应该挂钩 FormClosed 事件。
- 在 form2 中,当用户单击按钮(或其他)时关闭 form2。
- 在您的事件处理程序中,对于 FormClosed,重新显示全局 form3。
在 form2 上,单击 "Go to form 3" 按钮
form3.Show();
在 form3 上,单击 "Back to form 2" 按钮
this.Hide();
感谢大家的贡献!我最终构建了一个可以扩展到多种形式的灵活解决方案。
应用程序启动时,我会创建所有必需的表单。我有一个辅助 class 和一个(全局)变量,它保存当前的活动表单(我使用了一个 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.currentActiveForm 分配一个新值,该值在所有表单中都可见。
我正在开发一个 C#(紧凑型框架)应用程序,我需要 3 个表单。我可以从 form1(主)到 form2,从 form1 到 form3。我还希望能够从 form2 切换到 form3。 Form3 必须始终相同(我需要在应用程序启动时创建它并在应用程序结束时关闭它)。
在 form1 上,在 "Go to form 2" 按钮上
form2.Show(); form2.BringToFront();
在 form1 上,在 "Go to form 3" 按钮上
form3.Show(); form3.BringToFront();
在 form2 上,在 "Back to form 1"
上this.Hide();
在 form3 上,在 "Back to form 1"
上this.Hide();
但是如何从 form2 切换到 form3 呢?
感谢您的帮助!
我认为这里有一个多部分解决方案。
- 首先,如果您的 form3 是 "global" 表单而不应该是 re-instantiated,那么您应该将其作为静态内部变量存储在某处以便于参考。
- 当 form1 打开 form2 时,您应该挂钩 FormClosed 事件。
- 在 form2 中,当用户单击按钮(或其他)时关闭 form2。
- 在您的事件处理程序中,对于 FormClosed,重新显示全局 form3。
在 form2 上,单击 "Go to form 3" 按钮
form3.Show();
在 form3 上,单击 "Back to form 2" 按钮
this.Hide();
感谢大家的贡献!我最终构建了一个可以扩展到多种形式的灵活解决方案。
应用程序启动时,我会创建所有必需的表单。我有一个辅助 class 和一个(全局)变量,它保存当前的活动表单(我使用了一个 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.currentActiveForm 分配一个新值,该值在所有表单中都可见。