2010-03-11 93 views
1

我創建了一個自定義控件,它由兩個單選按鈕組成,其外觀設置爲「按鈕」。這個控件的作用就像兩個切換按鈕,帶有「開」切換按鈕和「關」切換按鈕。我有一個公共布爾屬性「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 

回答

0

您需要在屬性setter添加isAOnChanged事件,提高它。

順便說一下,.Net中的屬性和方法應該是UpperCamelCased。

+0

謝謝,但我認爲還需要做更多的事情,而不僅僅是添加事件並提升它。 應該如何處理? 有沒有辦法自動保持這種雙向綁定? – ChrisAU 2010-03-11 02:28:02

+0

不需要。您需要做的就是創建一個正確名稱和類型的事件('EventHandler'),並在值發生更改時觸發它。 – SLaks 2010-03-11 02:29:32

+0

SLaks,我添加了一個事件「Public Event isAOnChanged As EventHandler」,並在屬性設置器中引發了這個事件,但對象中綁定的布爾屬性仍然沒有得到任何活動。 – ChrisAU 2010-03-11 02:36:48