Доступ к динамически созданному общедоступному объявлению UserControl — WinForms

#vb.net #user-controls

#vb.net #пользовательские элементы управления

Вопрос:

Логические

Существует Form1 с FlowLayoutPanel ‘flowItems’, который должен быть заполнен UserControl ‘UCItem’. Для заполнения элементов потока используется массив. For-Loop перебирает массив и создает новый элемент UCItem, присваивает ему имя тега с номером и добавляет его в элемент потока. Вся эта часть работает.

Проблема

Я хочу изменять общедоступную объявленную логическую переменную «IsChecked» при каждом нажатии на вновь созданный элемент управления. Для достижения этой цели я добавил обработчик событий (UCItem.Click ), который получает и устанавливает свойство.

Как бы то ни было, я не могу получить доступ к общедоступной логической переменной в UCItem.

Код: UC_Item.vb

 Public isChecked As Boolean = False

Private Sub toggle_color()
    If Me.BackColor = Color.FromArgb(24, 24, 24) Then
        Me.BackColor = Color.RoyalBlue
        Me.txtName.BackColor = Color.RoyalBlue
        Me.txtName.ForeColor = Color.Black
        Me.BackgroundImage = Nothing
        isChecked = True
    Else
        Me.BackColor = Color.FromArgb(24, 24, 24)
        Me.txtName.BackColor = Color.Black
        Me.txtName.ForeColor = Color.White
        Me.BackgroundImage = Image.FromFile(Application.StartupPath amp; "/res/UCItem_Wallpaper.png")
        isChecked = False
    End If
End Sub

Private Sub UC_Item_Click(sender As Object, e As EventArgs) Handles MyBase.Click
    toggle_color()
End Sub

Private Sub TxtName_Click(sender As Object, e As EventArgs) Handles txtName.Click
    toggle_color()
End Sub
  

Код: Form1.vb

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim UCItem As UC_Item

    flowItems.SuspendLayout()
    For i As Integer = 0 To items.Count - 1
        UCItem = New UC_Item
        UCItem.Tag = "UCItem" amp; i
        UCItem.txtName.Text = items(i).ToString
        flowItems.Controls.Add(UCItem)
        UCItem.Show() : UCItem.Visible = True
        AddHandler(UCItem.Click), AddressOf UCItem_Click
    Next
    flowItems.ResumeLayout()

End Sub

Private Sub UCItem_Click(sender As Object, ByVal e As EventArgs)
    ' -- not working part --
    ' If sender.isChecked = True Then
    '        sender.isChecked = False
    '  else
    '        sender.isChecked = True
End Sub
  

Пробовал

Я попытался передать UCItem в качестве отправителя.Тег»но это тоже не работает. Я не могу получить доступ к .Тег и .Назовите свойство отправителя в событии щелчка.

Любая помощь приветствуется!

Комментарии:

1. Попробуйте это: измените значение Public isChecked As Boolean = False на a Public Property и попробуйте CType(sender, UCItem).isChecked =

2. Большое спасибо! Это работает. Поддержано

3. Я рад, что смог помочь!