我目前正在开发c#中的独立应用程序,我也是c#的新手,所以不知道它的所有功能..
在我的应用程序中,我有一个主要表单,其中MDIContainer属性为true ..在该主表单中,我创建了一个菜单,通过该菜单可以打开不同的子表单...
问题是如果用户点击菜单项,表单正在打开,因为我已创建其实例并在click事件中显示它。但是,如果一个子表单已经打开并且用户单击另一个表单,那么该表单也将打开..
在这种情况下,我想自动关闭以前的子表单。
以下是示例代码..
public void menu1_click(sender,e)
{
Dim objForm1 As New Form1()
objForm1.ShowDialog()
}
和secode表格,
public void menu2_click(sender,e)
{
Dim objForm2 As New Form2()
objForm2.ShowDialog()
}
所以这里两个表单都可以一次打开,但我希望前一个表单关闭,如果新的打开...一次一个表单..
请忽略语法和准时错误,因为它只是样本.. 请建议我做最好的方法!!!!
答案 0 :(得分:3)
在MDI表单中创建以下函数。
public void OpenForm(Form toOpen)
{
foreach (Form child in MdiChildren)
child.Close();
toOpen.MdiParent = this;
toOpen.Show();
}
在菜单项事件处理程序中调用它,如下所示OpenForm(new Form1())
答案 1 :(得分:1)
答案 2 :(得分:1)
要关闭所有其他表单,您需要创建一个类和静态方法,如下所示:
class Helper
{
public static void HideAllForms()
{
Assembly currentAssembly = Assembly.GetExecutingAssembly();
int count = Application.OpenForms.Count;
for (int i = 0; i < count; i++)
{
Form f = Application.OpenForms[i];
if (f.GetType().Assembly == currentAssembly && f.Name != "frmMDI") //Here 'frmMDI' is the name of mdiform.
{
f.Close();
}
}
}
}
现在在你的函数中调用这个方法
public void menu2_click(sender,e)
{
Helper.HideAllForms();
Form2 objForm2 =New Form2();
objForm2.Show();
}
这对我来说很好,希望这对你也有用..
答案 3 :(得分:0)
您需要编写代码来打开该表单,如下所示:
对于打开第一个表单,请在MDI表单的单击事件中编写代码,
Dim iobjForm1 As New Form1()
iobjForm1.ShowDialog()
和secode表格,
Dim iobjForm2 As New Form2()
iobjForm2.ShowDialog()
它会一次打开两个表单。
希望这会对你有所帮助。
答案 4 :(得分:0)
如果您一次只希望存在一个子表单,则可能存在比MDI表单更适合的其他机制。
例如,您可以创建用户控件,而不是使用子窗体。在主窗体中的固定位置显示一个用户控件(例如,在面板内,用于定位),然后将其换出以用于不同的用户控件;这不是打开一个新的子窗口而是关闭旧窗口。