我在派生的TabPage
中有一个封装控件,我无法将其与包含派生MainForm
的{{1}}格式对接。
我已正确添加了TabPage
和控件,并且它们显示在TabPage
上。但是,控件未正确停靠(样式:填充)。您可以通过调整表单来验证这一点。
我在派生的MainForm
的构造函数中设置了属性_control.Dock = System.Windows.Forms.DockStyle.Fill
和_control.Anchor = Left | Right | Top | Bottom
。
以下是代码示例:
TabPage
在public class DerivedTab : TabPage {
public DerivedTab(){
...
_control= new BrightIdeasSoftware.TreeListView();
this.Controls.Add(this._control);
_control.Anchor = System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom;
_control.Dock = System.Windows.Forms.DockStyle.Fill;
...
}
}
中,这是在运行时创建派生选项卡的函数:
MainForm
无论如何,我使用Visual Studio Designer生成了此代码,并且控件正确停靠。然后,我为tabpage创建了一个类(因为我将需要许多不同数量的这些选项卡)并将与tabpage相关的所有内容复制到 private DerivedTab CreateTab(string name)
{
DerivedTab tab = new DerivedTab(this, name);
tab.SuspendLayout();
MainTab.Controls.Add(tab);
return tab;
}
函数。我将与tabpage属性相关的任何内容移动到其构造函数中。我将控件封装在派生的CreateTab
中,并在派生的标签页中移动了与控件相关的所有内容。
那么,我错过了什么?是否可以在不实现事件处理程序功能的情况下停靠封装的控件?
答案 0 :(得分:1)
我找到了解决自己问题的方法。在TabControl为TabPage添加TabPage以便正确停靠后,必须调用ResumeLayout。
private DerivedTab CreateTab(string name)
{
DerivedTab tab = new DerivedTab(this, name);
tab.SuspendLayout();
MainTab.Controls.Add(tab);
tab.ResumeLayout();
return tab;
}