Добавление обработчика событий в пользовательский элемент управления - PullRequest
0 голосов
/ 29 марта 2019

Я создал пользовательский элемент управления (флажок) с пользовательским 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

Конечный класс

...