Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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# 在拥有所有者权限的情况下打开子窗体_C# - Fatal编程技术网

C# 在拥有所有者权限的情况下打开子窗体

C# 在拥有所有者权限的情况下打开子窗体,c#,C#,我试图在另一个表单中插入一个表单。我使用了.Controls.Add(form),它可以正常工作。我的问题是,我必须声明所有者,为此我必须将toplevel设置为true,但如果我将toplevel设置为true,我将无法使用该控件。添加原因是告诉我无法将顶级控件添加到控件 我该怎么办 public void openChildForm(Form childForm) { if (activeForm != null) activeForm.Close();

我试图在另一个表单中插入一个表单。我使用了.Controls.Add(form),它可以正常工作。我的问题是,我必须声明所有者,为此我必须将toplevel设置为true,但如果我将toplevel设置为true,我将无法使用该控件。添加原因是告诉我无法将顶级控件添加到控件

我该怎么办

 public void openChildForm(Form childForm)
    {
        if (activeForm != null) activeForm.Close();
        activeForm = childForm;
        childForm.TopLevel = true;
        childForm.TopMost = true;


        childForm.FormBorderStyle = FormBorderStyle.None;
        childForm.Dock = DockStyle.Fill;
        
        this.Controls.Add(childForm);
        panelChildForm.Tag = childForm;

        childForm.Owner = this;
        childForm.BringToFront();
        childForm.Show();




    }
先谢谢大家,,
大卫。

对我来说,你想做的事情有点奇怪。窗体是一种窗口。为什么要在另一个窗口中添加窗口?是否要创建用户控件并在现有窗体中显示该用户控件?

看起来您正在使用WinForms

查看(多文档界面表单)

您可以通过设置父窗体属性
IsMdiContainer=true
然后子窗体
childForm.mdipradent=parentForm

下面是一个小例子:

向父窗体添加一个
menuStrip
,并设置父窗体
main menuStrip=menuStrip
。添加一个菜单项并将一些代码添加到
menuStrip\u ItemClicked
事件中

private void menuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    if (e.ClickedItem.Text == "New Child")
        ShowNewForm(sender, e);
} 

private void ShowNewForm(object sender, EventArgs e)
{
    Form childForm = new Form();
    childForm.MdiParent = this;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
}
你应该以这种行为结束。

如果要访问同一应用程序中的其他表单,可以使用循环,使用
application.OpenForms
查找表单,或者使用
application.OpenForms[“form1”]
application.OpenForms[0]


如果您使用MdiForms,您可以使用
parentMdiForm.mdichilds

查找子表单。您发布的原始问题中没有足够的信息,但看起来您正在尝试创建边栏页面菜单可能提供的功能。在这种情况下,单击侧边栏上的按钮会更改当前显示的窗口。关于侧边栏导航是否与您所说的内容相关?如果您尝试搜索“winforms侧栏导航”,也可以获得一些信息,例如关于在winforms中创建导航的信息,还有更多链接


我只是想猜猜你在这里想干什么。如果您想完善您得到的答案,原始问题应该包括指向github示例项目的链接,或者至少更多地解释目标是什么。

当您将childForm.TopLevel设置为false时,您可以将表单作为子控件添加到另一个控件中。为什么需要设置所有者?(另一种可能是使用UserControl,但没有可以设置的所有者)Controls.Add()只能与TopLevel=false一起使用。这样一个控件的有效“所有者”现在是
Parent
。如果该表单要求将Owner设置为正确操作,则您不能以这种方式使用它。以下任何答案有帮助吗?我需要Owner属性。这就是问题所在。我必须把它说出来,因为我必须能够禁用和重新启动按钮,从一种形式从另一种形式你应该添加到你的问题,使它更容易理解你为什么要这样做。如果要访问同一应用程序中的其他表单,可以使用
application.OpenForms[“form1”]
application.OpenForms[0]
如果使用MdiForms,可以使用
parentMdiForm.MdiChildren[0]
没错,但我需要输入属性所有者。而且它不兼容