1

Windows FormsLabelで構造体メンバーをs にバインドしようとしています。ただし、この構造はクラスのメンバーであり、いくつかのメンバーをラベルにバインドする必要があるため、これを行うことはできません。

この構造が であり、バインドしてプロパティをSystem.Drawing.Pointにしたいとしましょう。XYLabel

Imports System.ComponentModel
Public Class Form1
    Implements INotifyPropertyChanged

    Private _pt As Point
    Public Property Pt As Point
        Get
            Return _pt
        End Get
        Set(value As Point)
            _pt = value
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Pt"))
        End Set
    End Property


    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Label1.DataBindings.Add("Text", Me, "Pt")
        Label2.DataBindings.Add("Text", Me.Pt, "X")
        Label3.DataBindings.Add("Text", Me, "Pt.Y")
    End Sub

    Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

End Class

bindingsourcetoMeおよびdatamemberto 構造体を設定すると、メソッドLabel1の結果、プロパティの値が表示され、変更されません。ToString()Label2XLabel3

しかし、新しいプロパティを割り当てると、その値のみPointが更新されます。はもう同じではありません。また、「サブメンバー」である可能性がないため、機能しません。PtLabel1Label2datasourceLabel3.DataBindings.Add("Text", Me, "Pt.Y")datamember

INotifyPropertyChangedまた、すべてのプロパティを実装する新しい構造を作成しようとしましたが、うまくいきませんでした。

新しい構造を割り当てた場合でも、バインドLabel2または可能にする方法はありますか?Label3

Point私の目標は、新しいプロパティを割り当て、データバインディングを介しておよびの値Me.Ptを観察することです。Pt.XPt.YLabel2Label3

4

2 に答える 2

0

との値を単純に返すメソッドを使用して、フォームに と のプロパティPt_Xを追加することをお勧めします。さらに、プロパティ セッターに または が変更されるかどうかを確認し、変更される場合は適切なイベントを発生させる必要があります。Pt_YGet_pt.X_pt.YPt_pt.X_pt.Y

Pointまたは、クラスとラベルの間のインターフェースとして機能するクラスを定義することもできます。への変更ptはこのクラスに通知され、ラベルに何を入れるかを計算し、それを問題のラベルに中継します。

于 2013-01-27T22:51:03.220 に答える
0

ほとんど正解です。Label1そのままLabel3動作します。変化する

Label2.DataBindings.Add("Text", Me.Pt, "X")

Label2.DataBindings.Add("Text", Me, "Pt.X")

また、Label2作業を開始します。

フィールドではなく、プロパティを介して新しい値を割り当てるようにしてください_pt

于 2013-01-27T22:39:14.680 に答える