停靠在C#中的MDI控件

发布于 2024-10-29 04:55:48 字数 1144 浏览 0 评论 0原文

我在左侧面板中有一个可单击的主表单,具体取决于您单击的内容,将打开新类型的表单。右侧有另一个面板,我想在其中停靠通过单击左侧打开的表单。

如何将表单添加到右侧面板中一个列表中的表单中?下面的代码的问题是它添加了第一个元素。然而,当我添加第二个元素时,它们都消失在面板后面:/

private void addToPanel2(Form o)
{
    if (o is Form)
    {

        if (panel2.Controls.Count == 0)
        {
            o.MdiParent = this;
            panel2.Controls.Add(o);
            o.Dock = DockStyle.Top;
            o.Show();
        }
        else
        {
            //then we know that this is an addable data item
            foreach (Form obj in panel2.Controls)
            {
                if(obj.GetType().Name.Equals(o.GetType().Name))
                {
                    //we dont want to add it as the data type is already open
                    MessageBox.Show("This data item must already be open. Please Check.");
                }
                else
                {
                    // add it as its not in there
                    Form f = (Form)obj;
                    f.MdiParent = this;
                    f.Dock = DockStyle.Top;
                    f.Show();
                }
            }
        }
    }

谢谢

I have a main form in a panel on the left thats clickable, depending on what you click a new type of form opens. on the righti have another panel where i want to dock the forms that have been opened from clicking on the left.

How can i get the forms to add in a list under one another in the panel on the right? the issue with the code below is that it adds the first element fine. However when i add the second element they both dissapear behind the panel :/

private void addToPanel2(Form o)
{
    if (o is Form)
    {

        if (panel2.Controls.Count == 0)
        {
            o.MdiParent = this;
            panel2.Controls.Add(o);
            o.Dock = DockStyle.Top;
            o.Show();
        }
        else
        {
            //then we know that this is an addable data item
            foreach (Form obj in panel2.Controls)
            {
                if(obj.GetType().Name.Equals(o.GetType().Name))
                {
                    //we dont want to add it as the data type is already open
                    MessageBox.Show("This data item must already be open. Please Check.");
                }
                else
                {
                    // add it as its not in there
                    Form f = (Form)obj;
                    f.MdiParent = this;
                    f.Dock = DockStyle.Top;
                    f.Show();
                }
            }
        }
    }

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那片花海 2024-11-05 04:55:48

这是不可能的,MDI 子窗体不能是面板的子控件。将非 MDI 表单添加到面板也是一个不确定的提议,但受到支持。调用其 SetTopLevel() 方法,传递 false,将其 Visible 属性设置为 true。您还必须将其 FormBorderStyle 属性设置为 None,它不再作为顶级窗口正常运行。

这只是将其变成了 UserControl。您最好实际上将其设为用户控件,这样可以使用更少的资源并且有更好的文档记录。

This is not possible, an MDI child form cannot be a child control of a panel. Adding a non-MDI form to a panel is an iffy proposition as well but is supported. Call its SetTopLevel() method, passing false, set its Visible property to true. You also have to set its FormBorderStyle property to None, it no longer behaves properly as a top-level window.

This just turns it into a UserControl. You are better off actually making it a UserControl, that uses a lot less resources and is much better documented.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文