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