在Windows窗体设计器中编辑UserControl子类?

时间:2011-07-01 12:15:42

标签: .net vb.net winforms visual-studio-2010

在VS2010中,针对Framework 4.0,我有一个UserControl,其中包含一个空的第二行的TableLayoutPanel。

是否可以使用Windows窗体设计器将项添加到第二行,还是必须通过代码完成所有操作?

编辑:在回复Hans Passant的评论时,链接的问题引用了在另一个控件中使用的UserControl。我问的是有关继承控件的问题。

我创建了以下测试代码,其中TestControl是一个包含名为“TableLayoutPanel1”的TableLayoutPanel的UserControl:

Imports System.ComponentModel
Imports System.Windows.Forms.Design

<Designer(GetType(testDesigner))>
Public Class TestControl
End Class

Public Class testDesigner
    Inherits ControlDesigner
    Public Overrides Sub Initialize(component As System.ComponentModel.IComponent)
        MyBase.Initialize(component)
        Dim X As TestControl = CType(component, TestControl)
        EnableDesignMode(X.TableLayoutPanel1, "TableLayoutPanelX")
    End Sub
End Class

在新文件中创建以下类:

Public Class TestInheritedControl
    Inherits TestControl
End Class

创建一个控件,当在设计器中查看时,该控件包含一个名为“TableLayoutPanel1”的TableLayoutPanel,它不是设计器可编辑的。这是我原来的问题中描述的情况,这个问题没有解决。

创建一个新的UserControl,而不是从以前的任何UserControl继承,然后将TestControl放入其中,创建一个TestControl实例,其中包含一个名为“TestControl1.TableLayoutPanelX”的Designer可编辑的TableLayoutPanel。

有没有办法让TestInheritedControl类,如上所示,Designer-editable?

1 个答案:

答案 0 :(得分:0)

我今天只需要做类似的事情。我解决它的方法是在基类中使用未实例化的引用,但在继承类上进行实际的实例化。

您必须添加几个步骤才能完全插入所有内容,但它可以为您提供所需的控件。您必须将TableLayoutPanel拖放到每个继承控件类型上,并在构造函数中将基类的版本设置为当前实例化版本(在调用initializecomponents之后)。

这样,您可以在继承控件中“设计”它,但可以从基本控件中以编程方式使用它。