我的目标是使用自定义的TableLayoutPanel控件为项目中的表单集合创建布局模板。我想创建一个继承TableLayoutPanel且仅仅一列的控件。
通过覆盖TableLayoutPanel的OnLayout事件,可以轻松地在2x2默认值之上添加其他行/列:
public partial class MyFormOutline : TableLayoutPanel
{
protected override void OnLayout(LayoutEventArgs e)
{
this.DoubleBuffered = true;
this.RowCount = 3;
this.ColumnCount = 1; // Index out of range in designer
base.OnLayout(e);
}
}
但是,在尝试将自定义控件放在窗体上时,将ColumnCount设置为小于2的值会产生“索引超出范围”错误消息:
最初,我认为“索引超出范围”消息引用了ColumnStyles集合,因此我尝试删除了额外的列样式,但这没有效果:
while (this.ColumnStyles.Count > 1)
this.ColumnStyles.RemoveAt(this.ColumnStyles.Count - 1);
我怀疑TableLayoutPanel中还有其他内容,希望至少有两列/行。需要重写基本TableLayoutPanel中的其他事件/方法,以在继承的控件中减少列/行的数量吗?
顺便说一句:我意识到我可以删除设计器中不需要的列,这就是我目前正在“解决”问题的方式,但是我希望有一种代码解决方案可以消除这一额外步骤。