2013-09-29 3 views
4

클래스의 인스턴스 값에 따라 텍스트 값이 변경되는 양식에 레이블을 지정하고 싶습니다. 레이블의 텍스트 값을 객체 dataSource에 바인딩 할 수있는 것 같습니다. 이것을 시도 할 때 작동하지 않는 것 같습니다.VB.NET label.text를 개체 속성에 바인딩

Me.Label4.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.ItemInfoBindingSource, "ItemNumber", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)) 

내 itemInfoBindingSource :

Me.ItemInfoBindingSource.DataSource = GetType(CFP.ItemInfo) 

및 클래스 정의 :

Public Class ItemInfo 
    Public Property ItemNumber As String = "rename" 
    Public Property Description As String 
    Public Property FileLocation As String 
    Public Property CompileHistory As List(Of CompileHistory) 
End Class 

나는 내가 무슨 짓을하는 클래스가 아닌 클래스의 인스턴스에 바인딩 생각합니다. 그것에 대해 생각하고, 정말로하고 싶은 것은 클래스의 인스턴스를 레이블에 묶는 것입니다. 어떻게 ...? 이것이 가능합니까?

답변

6

예, 가능하지만 라벨이 속성이 변경되었음을 알리는 이벤트를 발생시켜야합니다. BindingList와 같은 형식을 사용하는 경우이 작업은 자동으로 수행되지만 String에 바인딩하려고하면 PropertyChanged 이벤트가 발생하지 않습니다.

  • 확장 된 속성에 대응하여 PropertyChanged 이벤트
  • 변경을 자동 구현 속성을 추가

    • 변경 클래스 정의에서 INotifyPropertyChanged를 구현하고 이벤트를 발생 :

      는 클래스에 이벤트를 추가하려면 . 여기

  • 이 클래스에서 바로 ItemNumber 속성에 대한 이러한 변화의 결과이다 : 나는 폼에 텍스트 상자와 라벨을 추가 Form.Load 이벤트에 데이터 바인딩을 추가
    Public Class ItemInfo 
        Implements System.ComponentModel.INotifyPropertyChanged 
    
        Private _itemNumber As String = "rename" 
        Public Property ItemNumber As String 
         Get 
          Return _itemNumber 
         End Get 
         Set(value As String) 
          _itemNumber = value 
          RaiseEvent PropertyChanged(Me, 
           New System.ComponentModel.PropertyChangedEventArgs("ItemNumber")) 
         End Set 
        End Property 
    
        Public Event PropertyChanged(sender As Object, 
         e As System.ComponentModel.PropertyChangedEventArgs) _ 
         Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged 
    End Class 
    

    , 추가 된 ItemInfo 유형의 ItemInfoBindingSource라는 필드를 열고 TextBox.TextChanged 이벤트의 ItemNumber를 업데이트했습니다. 텍스트 상자에 입력 할 때

    Private ItemInfoBindingSource As New ItemInfo 
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
        Label1.DataBindings.Add("Text", Me.ItemInfoBindingSource, "ItemNumber") 
    End Sub 
    
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) _ 
         Handles TextBox1.TextChanged 
    
        ItemInfoBindingSource.ItemNumber = TextBox1.Text 
    End Sub 
    

    는 이제, ItemNumber.Set은 변경된 것 알아 듣고 아무것도 할 수 호출 및 이벤트를 발생한다. 레이블은 청취하고 있으며 새 값을 볼 수 있도록 Text 속성을 업데이트합니다.

    +0

    감사합니다. 내가 오늘 찾고 있었던 것. – thephez

    관련 문제