C# 关于在panel中显示窗体的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 关于在panel中显示窗体的问题相关的知识,希望对你有一定的参考价值。

在panel中显示窗体实例,如果保留FormBorderStyle的话,就会有很多地方有问题,比如文本框的全选等,            Form1 f = new Form1();            f.TopLevel = false;            int x = (this.panelForm.Width - f.Width) / 2;            int y = 10;            f.Location = new Point(x, y);            f.FormBorderStyle = FormBorderStyle.None;            this.panelForm.Controls.Add(f);            f.BringToFront();            f.Show();代码这样写,除了标题栏什么的没有了,其它倒没什么问题,但是我想要保留标题栏,该怎么做,就是不要f.FormBorderStyle = FormBorderStyle.None;这句,但是如果不要这句,则文本框不能全选等

参考技术A 这个不能全选我没明白,但是我有个解决楼主问题的办法。
首先,我们要知道,什么是标题栏,标题栏的本质是什么:其实就是在窗体上方显示窗体名称的一个panel,只是样子有点不同而已。
那么解决方法自然而然就出来了,我们完全可以自己定义一个panel放到窗体的最上面,然后写上窗体的名字,再把样式设置成我们想要的样式就ok了啊!

在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体

在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体
ShowAllPage sAllPage = new ShowAllPage();
          //  sAllPage.FormBorderStyle = FormBorderStyle.None;
           // sAllPage.Dock = DockStyle.Fill;
            sAllPage.TopLevel = false;
            this.MainPanel.Controls.Clear();
            this.MainPanel.Controls.Add(sAllPage);
            sAllPage.Show();

MainPanel为主窗体中的Panel控件,ShowAllPage为要在主窗体中显示中Panel中的窗体.

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

FormBorderStyle 属性设置新窗体的边框样式
Dock属性获取或设置哪个边框停靠到父框体并确定如何随父框体一起调整大小
这两项属性可不加

 

但是用一个最简单的方法来说,就是使用MDI
首先,父窗口要设置IsMdiContainer属性为True。实现MDI结构的父子窗口套用
然后在窗口跳转处改为如下代码:
例:一般跳转:Form1 f=new Form();
                                 F.Show();
改为:
Form1 c = new Form1();
            c.MdiParent = this;
            c.Show();
不过这样有时会遇到一个问题,就是子窗体在跳出的时候会以父窗体的0,0坐标为准,所以在父窗体中如果有菜单栏的话,子窗体会被遮盖上,那么我们就在子窗体的Form_Load()中加上一句话来设置它与窗体上边缘的距离
this.Top = 100;
这样就完成了一个窗体在另一个窗体中的嵌套

以上是关于C# 关于在panel中显示窗体的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于打印Panel中显示的控件的问题

关于DevExPress WinForm的MDI窗体问题

C#中使窗体显示SplitContainer或Panel中。

关于C# 窗体自动隐藏和加载的问题

c#子窗体控制父窗体的显隐

关于Swing窗体有时候要放大缩小边框才能显示问题?