将事件处理程序添加到自定义控件

时间:2019-03-29 03:17:06

标签: vb.net winforms custom-controls

我已经使用自定义EventHandler创建了自定义控件(复选框)

Public Event CheckedChanged As EventHandler

Private Sub setCheckStateUI(sender As Object, e As EventArgs)
   ...
   RaiseEvent CheckedChanged(sender, e)
End Sub

如果我将此控件直接添加到表单中,它将运行正常且没有任何错误。但是,当我将其添加到另一个自定义控件(设置窗口的页面)并将第二个自定义控件添加到窗体(设置窗口)时,“设置窗口”冻结并Visual Studio自动重启。

如果我在代码中删除了此事件处理程序,问题就消失了。

这里可能是什么问题?

预先感谢

更新 :(自定义控件的完整代码)

Public Class cusCheckBox
Private mystring As String
Private CheckButtonState As Integer = 0

Public Event CheckedChanged As EventHandler

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    mystring = Me.Name
    setSizes()
End Sub

Public Property CheckState() As Integer
    Get
        CheckState = CheckButtonState
    End Get

    Set(ByVal value As Integer)
        CheckButtonState = value
        chkButton.CheckState = CheckButtonState
    End Set
End Property

Public Property LabelText() As String
    Get
        LabelText = mystring
    End Get

    Set(ByVal value As String)
        mystring = value
        lblText.Text = mystring
        setSizes()
    End Set
End Property

Public Overrides Property Font As Font
    Get
        Return lblText.Font
    End Get
    Set(value As Font)
        lblText.Font = value
    End Set
End Property

Private Sub chkButton_CheckedChanged(sender As Object, e As EventArgs) Handles chkButton.CheckedChanged
    If chkButton.CheckState = 1 Then
        chkButton.Image = Global.MYLogs.My.Resources.Resources.btnToggleOn
        CheckButtonState = 1
    Else
        chkButton.Image = Global.MYLogs.My.Resources.Resources.btnToggleOff
        CheckButtonState = 0
    End If
End Sub

Private Sub lblText_Click(sender As Object, e As EventArgs) Handles lblText.Click
    setCheckStateUI(sender, e)
End Sub

Private Sub cusCheckBox_MouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
    setCheckStateUI(sender, e)
End Sub

Private Sub cusCheckBox_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    setCheckStateUI(sender, e)
    setSizes()
End Sub


Private Sub cusCheckBox_Resize(sender As Object, e As EventArgs) Handles Me.Resize
    setSizes()
End Sub

Private Sub setSizes()
    Me.Size = New Size(chkButton.Width + lblText.Width + 4, chkButton.Height)
End Sub

Private Sub setCheckStateUI(sender As Object, e As EventArgs)
    If chkButton.CheckState = 0 Then
        chkButton.Image = Global.MYLogs.My.Resources.Resources.btnToggleOn
        chkButton.CheckState = 1
        CheckButtonState = 1
    Else
        chkButton.Image = Global.MYLogs.My.Resources.Resources.btnToggleOff
        chkButton.CheckState = 0
        CheckButtonState = 0
    End If

    RaiseEvent CheckedChanged(Me, EventArgs.Empty)

    chkButton.Select()
End Sub

结束班级

0 个答案:

没有答案