Пользовательский контроль и привязка - PullRequest
1 голос
/ 11 марта 2010

Я создал пользовательский элемент управления, состоящий из двух переключателей, внешний вид которых установлен на «Кнопка». Этот элемент управления должен действовать как две кнопки переключения с кнопкой включения «Вкл» и кнопкой переключения «Выкл». У меня есть открытое логическое свойство «isAOn», которое используется для установки состояния обеих кнопок, и я хочу иметь возможность привязать это свойство к логическим значениям. Я импортировал модель компонента и установил

Теперь, когда я добавляю это в форму для логического значения в одном из моих классов, оно не обновляет логическое значение класса, когда я меняю нажатую кнопку.

Советы о том, как решить эту проблему, и конструктивная критика в отношении дизайна классов приветствуется.

Спасибо!

Вот код:

Imports System.ComponentModel

''#
<DefaultBindingProperty("isAOn")> _
Public Class ToggleButtons

    Private _isAOn As Boolean
    Private _aText As String
    Private _bText As String
    Private _aOnColor As Color
    Private _aOffColor As Color
    Private _bOnColor As Color
    Private _bOffColor As Color

    Public Sub New()

        ''# This call is required by the Windows Form Designer.
        InitializeComponent()

        ''# Add any initialization after the InitializeComponent() call.
        aOffColor = Color.LightGreen
        aOnColor = Color.DarkGreen
        bOffColor = Color.FromArgb(255, 192, 192)
        bOnColor = Color.Maroon
        isAOn = False
        aText = "A"
        bText = "B"
    End Sub

    Private Sub configButtons()
        If _isAOn Then
            rbA.Checked = True
            rbA.BackColor = _aOnColor
            rbB.Checked = False
            rbB.BackColor = _bOffColor
        Else
            rbA.Checked = False
            rbA.BackColor = _aOffColor
            rbB.Checked = True
            rbB.BackColor = _bOnColor
        End If
        rbA.Text = aText
        rbB.Text = bText
    End Sub

    Public Property isAOn() As Boolean
        Get
            Return _isAOn
        End Get
        Set(ByVal value As Boolean)
            _isAOn = value
            configButtons()

        End Set
    End Property

    Private Sub rbOn_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbA.CheckedChanged
        isAOn = rbA.Checked
    End Sub

    Private Sub rbOff_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbB.CheckedChanged
        isAOn = Not rbB.Checked
    End Sub

    Public Property aText() As String
        Get
            Return _aText
        End Get
        Set(ByVal value As String)
            _aText = value
        End Set
    End Property
    Public Property bText() As String
        Get
            Return _bText
        End Get
        Set(ByVal value As String)
            _bText = value
        End Set
    End Property
    Public Property aOnColor() As Color
        Get
            Return _aOnColor
        End Get
        Set(ByVal value As Color)
            _aOnColor = value
        End Set
    End Property
    Public Property aOffColor() As Color
        Get
            Return _aOffColor
        End Get
        Set(ByVal value As Color)
            _aOffColor = value
        End Set
    End Property
    Public Property bOnColor() As Color
        Get
            Return _bOnColor
        End Get
        Set(ByVal value As Color)
            _bOnColor = value
        End Set
    End Property
    Public Property bOffColor() As Color
        Get
            Return _bOffColor
        End Get
        Set(ByVal value As Color)
            _bOffColor = value
        End Set
    End Property

End Class

1 Ответ

0 голосов
/ 11 марта 2010

Вам нужно добавить событие isAOnChanged и вызвать его в установщике свойств.

Кстати, свойства и методы в .Net должны быть UpperCamelCased.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...