在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?
答案 0 :(得分:0)
我今天只需要做类似的事情。我解决它的方法是在基类中使用未实例化的引用,但在继承类上进行实际的实例化。
您必须添加几个步骤才能完全插入所有内容,但它可以为您提供所需的控件。您必须将TableLayoutPanel拖放到每个继承控件类型上,并在构造函数中将基类的版本设置为当前实例化版本(在调用initializecomponents之后)。
这样,您可以在继承控件中“设计”它,但可以从基本控件中以编程方式使用它。