本文的要写的是如何将窗体(Form)添加到panel中。 为什么要这样呢? 1)如果用tab控件,整个窗体的控件太多,不易于我们编程; 2)可以更灵活的控制窗体的布局。 我想你一定看过这样的配制信息窗体吧(迅雷的配置页面)。 ![]() 在你的项目开发中,是否也希望做出这种效果呢? 应该如何设置呢? 单击窗体的左边的按钮,窗体右边的内容会根据单击的按钮变化. 开始是想到的设置思路很简单,主窗体(如上图),右边放置一个Panel控件. 然后根据单击的按钮将子窗体显示在Panel控件上. 在按钮的单击事件中加入下面的代码: private void button1_Click(object sender, EventArgs e) { ChildForm child = new ChildForm(); this.panel1.Controls.Add(child); child.Show(); } 运行程序 显示“不能将顶级控件添加到一个控件上”出现“不能将顶级控件添加到一个控件上”错误怎么处理? 在代码中加入 child.TopLevel = false; OK. 新问题又出现了.我们不希望子窗体的标题和边筐也显示在父窗体中,再添加如下代码. child.FormBorderStyle = FormBorderStyle.None; 现在的感觉是不是舒服多了. 但是还隐藏着一个新问题.怎样动态设置子窗体的Size、Location等呢? 我希望在调整父窗体大小时,Panel1 中子窗体的大小也跟随动态自动调整 . 需要加入下面的事件 private void panel1_Resize(object sender, System.EventArgs e) { try { this.child.ClientSize = new System.Drawing.Size(panel1.Size.Width, panel1.Size.Height); } catch(System.Exception Er) { MessageBox.Show(Er.ToString()); } } 编译无错,执行时(Error: 未将对象引用设置到对象的实例) 但连续点了4个一样的错误提示确认后,程序却可以正常执行,并且form1调整窗体大小form2也可以随之响应了。 此计不行,又生一计. 我们可以把子窗体当成一个控件,设置Dock属性不就行了吗? 赶快测试一下: private void button1_Click(object sender, EventArgs e) { ChildForm child = new ChildForm(); child.TopLevel = false; child.Dock = System.Windows.Forms.DockStyle.Fill; child.FormBorderStyle = FormBorderStyle.None; //child.Parent = this.panel1; this.panel1.Controls.Add(child); child.Show(); } OK 这是我第一次写关于技术的文章.希望大家多多支持. 本人文笔不好,多多包含. |