Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MDI父窗体:-设置父窗体(可能只是标题重复)_C#_Mdi - Fatal编程技术网

C# MDI父窗体:-设置父窗体(可能只是标题重复)

C# MDI父窗体:-设置父窗体(可能只是标题重复),c#,mdi,C#,Mdi,看看这个问题的答案。我试过了被接受答案的第二条评论。问题在于“Application.OpenForms[0]”。它给出的错误是“指定为此窗体的MDI父级的窗体不是MDI容器。 参数名称:value”。然后我展开以查看有多少表单是打开的。我现在发现了一个惊人的结果。有两种开放形式。其中一个是LoginForm,我有这个;成功登录后。当我把它改成这个时。关闭();应用程序已关闭。为什么它仍然打开?我如何在不关闭应用程序的情况下关闭它?首先,如果在关闭表单时应用程序完全关闭,很可能是因为您正在关闭主

看看这个问题的答案。我试过了被接受答案的第二条评论。问题在于“Application.OpenForms[0]”。它给出的错误是“指定为此窗体的MDI父级的窗体不是MDI容器。
参数名称:value”。然后我展开以查看有多少表单是打开的。我现在发现了一个惊人的结果。有两种开放形式。其中一个是LoginForm,我有这个;成功登录后。当我把它改成这个时。关闭();应用程序已关闭。为什么它仍然打开?我如何在不关闭应用程序的情况下关闭它?

首先,如果在关闭表单时应用程序完全关闭,很可能是因为您正在关闭主表单,即在:

Application.Run(new MainForm());
您的登录信息是否表明您正在关闭该主窗体

第二,如果表单要成为MdiParent,它必须将属性IsMdiContainer设置为true

第三,我不会依赖Application.OpenForms[0],而是遍历它们并按名称选择正确的一个,如下所示:

FormCollection fc = Application.OpenForms;

foreach (Form frm in fc)
{
if (frm.Name == "Main Form")
    do what you need to do...
}

希望这有帮助。

可能重复“是”。主要表单是我的登录表单。但它不是MDI父窗体。成功登录后将打开MDIPRENT。还有你的第三个解释:我试过了,比如Application\u Name.MdiParentForm\u Name。但没有起作用。显示错误“Application_Name.MdiParentForm_Name是一种类型,在给定上下文中无效”。我将更改您的应用程序,使MdiParentForm成为主窗体,该窗体在用户成功完成登录之前是隐藏的,然后关闭登录窗体。我不知道你是从哪里得到你的名字的?这不是我的建议。Application.OpenForms是OpenForms的集合,OpenForm有一个属性名。也许编辑你的问题来说明你想要实现什么?实际上我想关闭登录表单。这是实现的主要目标。现在的问题是如何设置从子窗体Form1打开的窗体(即Form2)的父窗体。我正在关闭Form1和打开Form2。问题的主要目标已经解决(即关闭Application.OpenForms[index]中显示的登录表单)。但正如您所说的“遍历它们并按名称选择正确的一个”,如何使用OpenForms的name属性?编辑答案以显示遍历OpenForms的源代码。