【问题标题】:Overriding the Windows (Form) control TableLayoutPanel questions覆盖 Windows(窗体)控件 TableLayoutPanel 问题
【发布时间】:2010-08-14 15:17:17
【问题描述】:

我有一个派生自 TableLayoutPanel 的类。此类构成表格更正(网格 3x8)并在某些单元格中添加一些复选框。所有这些都是通过重写函数 InitLayout() 来完成的。

public class TableLayoutPanelHours : TableLayoutPanel
{
    protected override void InitLayout()
    {  
        RowCount = 3;
        ColumnCount = 8;

        // Set some column and row styles
        RowStyles[0].SizeType = SizeType.Percent;
        RowStyles[0].Height = (100 / RowCount);
        // ... etc ...

        // ... create checkbox with the name checkbox1
        Controls.Add(checkbox1, 1, 1);  // Put in cell 1x1
        // ... etc ...
    }
}

构建完成后,可以从VS2010的工具箱中获取控件。

然后,将控件放在一个简单的 Windows 窗体上,会发生一些我不理解的事情: - 在设计模式下,控件尚未化妆。 TableLayoutPanel 显示默认的 2x2 网格,复选框位于一个奇怪的位置。运行后,控件显示正确(3x8 网格,复选框位于正确位置) - 并且:在Form的InitializeComponent()中,我看到这些行出现了:

// 
// tableLayoutPanelHours1
// 
this.tableLayoutPanelHours1.ColumnCount = 8;
this.tableLayoutPanelHours1.ColumnCount = 3; 
this.tableLayoutPanelHours1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); 
// ....

我已经排除了这些行在 Windows 窗体的 InitializeComponent() 中不可见,但为什么会发生这种情况?

谢谢。

【问题讨论】:

    标签: c# windows-forms-designer


    【解决方案1】:

    您正在与 TLP 的设计师进行战斗。它是一个自定义的,正如您可以清楚地看到它在设计模式下的行为方式。使用 InitLayout() 方法初始化 TLP 是不正确的,为时已晚。您应该改为在构造函数中执行此操作。

    但这仍然无法满足您的需求,TLP 设计器在初始化为 2x2 时会将行数和列数硬编码。而且它无法处理在设计时更改它的代码(就像您在 InitLayout 中所做的那样),没有要听的事件。你将不得不放弃那个设计师。

    应该没问题,因为您已经按照您想要的方式初始化了 TLP。使用 [Designer] 属性回退到 ControlDesigner。如果这对您的控制来说是困难的,那么您将不得不创建自己的设计师。使用 Reflector 查看内部 TableLayoutPanelDesigner 类以开始使用它。请注意,它不是一个简单的设计师。

    您会在 InitializeComponent 中看到这些属性分配,因为这些属性上的 [DefaultValue] 属性声明了不同的默认值。您可以通过向您的类添加私有的 ShouldSerializeRowCount(和 ColumnCount)方法来解决此问题。返回 false 以防止属性被序列化。

    【讨论】:

    • 不客气。并感谢您在没有帮助的答案数量方面为我的领导做出了贡献。 300 正在接近!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多