2012-10-25 48 views
0

我有一個A類含有聲明爲事件檢測vb的

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

兩者都有文本框2個的用戶控件。如果custInfo1中的textBoxA的值發生了變化,那麼我怎樣才能讓SeviceLocation1中的textBoxB的值也發生變化

如果有人能幫助我,我將非常感激。

感謝

+0

您必須從CustInfo控件中捕獲該事件,然後調用ServiceLocation控件上的某個方法。 (您可能需要在控件中創建自己的「已更改」事件。) – Styxxy

+0

是否可以通過custInfo控件調用A類中的函數 – user1516790

回答

0

你需要做到以下幾點:

  1. 裏面的CustInfo用戶控件,你需要編寫提出了從CustInfo用戶控件的事件textBoxA Changed事件內部代碼(例如TextBoxChanged事件)。 RaiseEvent statement

  2. 裏面的serviceLocation用戶控件,創建無論你textBoxB.Text一個公共屬性的getter和setter是

  3. 在同時包含用戶控件的形式,在新的CustInfo TextBoxChanged事件創建代碼,並設置ServiceLocation1用戶控件上的新屬性。

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處理該文本框TextChanged事件。

就我個人而言,我不太喜歡這種方法,因爲您依賴於瞭解TextBox的名稱或您的usercontrol的控件列表中的索引。

我肯定會選擇在你的用戶控件上創建自己的事件。甚至做起來也很容易!下面如何做到這一點。在你的用戶控件的代碼後面,你必須添加一個事件聲明:

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類,並添加一些屬性(例如保存舊的文本值,並保存新的文本值的屬性NewText屬性OldText):

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