0

次のように宣言された2つのユーザーコントロールを含むクラスAがあります

Friend WithEvents CustInfo1 As WindowsApplication1.CustInfo
Friend WithEvents ServiceLocation1 As WindowsApplication1.ServiceLocation

どちらにもテキストボックスがあります。custInfo1 の textBoxA の値が変更された場合、SeviceLocation1 の textBoxB の値も変更するにはどうすればよいですか

誰かが私を助けることができれば、私は最も感謝します.

ありがとう

4

2 に答える 2

0

次のことを行う必要があります。

  1. CustInfoユーザーコントロール内で、CustInfoユーザーコントロールからイベント(TextBoxChangedイベントなど)を発生させるtextBoxAChangedイベント内にコードを記述する必要があります。RaiseEventステートメント

  2. ServiceLocationユーザーコントロール内で、textBoxB.Textが何であれ、パブリックプロパティのゲッターとセッターを作成します

  3. 両方のユーザーコントロールを含むフォームで、新しいCustInfo TextBoxChangedイベントにコードを作成し、ServiceLocation1ユーザーコントロールに新しいプロパティを設定します。

于 2012-10-25T22:27:35.337 に答える
0

すべてのコントロール (カスタム コントロールも含む) にControlsは、そのコントロールの (サブ) コントロールにアクセスできるプロパティがあります。.Item(key)これで、メソッドを呼び出してテキストボックスを取得できます。次に、フォームまたはクラスでイベント ハンドラーを割り当てることができます。

Dim key As String = "textBoxA" 'Or simply the name of that TextBox in your CustInfo
Dim textboxA As TextBox = CustInfo1.Controls.Item(key)
AddHandler textBoxA.TextChanged, AddressOf mytextchangedhandler

mytextchangedhandlerその TextBox の TextChanged イベントを処理する場所。

個人的には、TextBox の名前またはユーザー コントロールの Controls リストのインデックスのいずれかを知っていることに依存しているため、この方法はあまり好きではありません。

ユーザーコントロールで独自のイベントを作成するオプションを選択することは間違いありません。やり方もとっても簡単!以下、やり方。ユーザー コントロールのコード ビハインドで、イベント宣言を追加する必要があります。

Event MyTextBoxChanged(sender As Object, e As EventArgs)

TextChanged次に、それを発生させる必要があります。ユーザーコントロールにイベントを実装することでこれを行いTextBoxAます(あなたがやりたいと説明したように):

Private Sub TextBoxA_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxA.TextChanged
    RaiseEvent MyTextBoxChanged(Me, EventArgs.Empty)
End Sub

MyTextBoxChangedこれで、このイベント ( ) を次のようにフォームに簡単に実装できます。

Private Sub CustInfo1_MyTextBoxChanged(sender As System.Object, e As System.EventArgs) Handles CustInfo1.MyTextBoxChanged
    ' Do something
End Sub

明らかに、更新されたテキストを取得する必要があります。必要に応じて、新しい (および/または古い値) を提供する独自の EventArgs を作成できます。クラスを継承し、System.EventArgsいくつかのプロパティを追加するだけです (たとえばOldText、古いテキスト値をNewText保持するプロパティと新しいテキスト値を保持するプロパティ)。

Public Class MyEventArgs
    Inherits System.EventArgs

    Private _OldText As String
    Public ReadOnly Property OldText() As String
        Get
            Return _OldText
        End Get
    End Property

    Private _NewText As String
    Public ReadOnly Property NewText() As String
        Get
            Return _NewText
        End Get
    End Property

    Public Sub New(oldText As String, newText As String)
        _OldText = oldText
        _NewText = newText
    End Sub
End Class

ここで、イベントの定義と発生を変更して、次を使用する必要がありMyEventArgsます。

Event MyTextBoxChanged(sender As Object, e As MyEventArgs)

Private Sub TextBoxA_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBoxA.TextChanged
    RaiseEvent MyTextBoxChanged(Me, New MyEventArgs(TextBoxA.Text))
End Sub

また、フォームの実装を変更します。

Private Sub CustInfo1_MyTextBoxChanged(sender As System.Object, e As MyEventArgs) Handles CustInfo1.MyTextBoxChanged
    MessageBox.Show(e.Text)
End Sub

イベントの詳細については、お気に入りのMSDNを参照してください。

于 2012-10-25T22:29:31.677 に答える