读书人

关于用户控件继承容器的功能,该怎么处

发布时间: 2012-05-05 17:21:10 作者: rapoo

关于用户控件继承容器的功能
我想为自定义的用户控件加上容器功能。。指的是当在窗体画上此用户控件时。。。再在此用户控件内绘画其它控件。。。当移动此用户控件时。在内的其它控件都随之移动。是不是要实现某个接口。。。???我知道有个可以直接继承的容器类。。。但是C#不支持多继承。。若继承了这个容器类的话。就不能提供设计界面了(就像一个类不继承窗体类就没法直接编辑界面一样)。。。。如何才能实现一个功能。。既能实现容器功能。又可以为这个类提供设计界面。。()

[解决办法]
给类定义加上DesignerAttribute:[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
[解决办法]
可以自定义容器控件啊

VB.NET code
'自定义控件代码Public Class TestControl    Dim MouseDownPt As Point    Public Sub New()        ' 此调用是 Windows 窗体设计器所必需的。        InitializeComponent()        ' 在 InitializeComponent() 调用之后添加任何初始化。        Me.SetStyle(ControlStyles.ContainerControl, True)    End Sub    Private Sub TestControl_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown        MouseDownPt = e.Location    End Sub    Private Sub TestControl_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove        If e.Button = Windows.Forms.MouseButtons.Left Then            Dim dx As Integer = e.X - MouseDownPt.X            Dim dy As Integer = e.Y - MouseDownPt.Y            Me.Location = New Point(Me.Location.X + dx, Me.Location.Y + dy)        End If    End SubEnd Class'测试窗体代码(窗体添加一个TestControl1控件)Public Class Form1    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        Dim NewBtn As New Button        Dim NewCheckBox As New CheckBox        Me.TestControl1.Controls.Add(NewBtn)        Me.TestControl1.Controls.Add(NewCheckBox)        NewBtn.Text = "Button1"        NewBtn.Location = New Point(10, 10)        NewCheckBox.Text = "CheckBox1"        NewCheckBox.Location = New Point(10, 50)    End Sub    End Class 

读书人网 >C#

热点推荐