2012-12-23 86 views
0

不久我要求幫助閱讀usercontrol內部的文本框的屬性。
Accessing to control inside of usercontrol 正如我所建議我做一個非常簡單的名爲xTextBox的公共類,並將其用作我的用戶控件中的文本框。這很好。處理用戶控件內部的控件事件

Public Class xTextBox 
    Inherits TextBox 
End Class 

現在我可以簡單地讀取來自主程序xTextbox一個屬性,它包含用戶控件:

Dim s As Integer = myUserControl.xTextBox1.SelectionStart 

但現在是,我不能讓主程序,文本框的事件問題。 也許我可以聲明'Shadows Event TextChanged ...'等等,但是我會在不同的情況下需要更多的事件,而usercontrol會是這樣,故意提高他們每個人在實際編程中看起來並不高雅。

如何獲取這些xTextbox的事件到主程序?

+0

是的,這個文本框只有一個控件包含那些usercontrol。 –

回答

4

如果您的新用戶控件只有一個控件和繼承文本框,那麼您可以使用屬性編輯器或使用AddHandler手動將正常事件附加到事件中。如果事情比我想要創建一個面板並將新的TextBox放入其中更加複雜,那麼訪問這些事件會更容易。

Public Class myUserControl 
    Inherits TextBox 

End Class 


Public Class Form1 

    Public Sub New() 
     InitializeComponent() 
     AddHandler MyUserControl1.TextChanged, AddressOf MyUserControl_textChanged 
    End Sub 

    Private Sub MyUserControl_textChanged(sender As Object, e As EventArgs) 
     Throw New NotImplementedException 
    End Sub 

End Class 

或者,如果你的用戶控件有多個自定義文本框在其中的,你可以創建自定義事件和火災,在一個共同的TextChanged事件在你的用戶控件和處理,在您的主要形式。

Public Class UserControl1 
    Public Event TextChange(sender As Object, e As EventArgs) 

    Private Sub MyUserControl_TextChanged(sender As System.Object, e As System.EventArgs) Handles MyUserControl1.TextChanged, MyUserControl2.TextChanged 
     RaiseEvent TextChange(sender, e) 
    End Sub 
End Class 

Public Class Form1 
    Public Sub New() 
     InitializeComponent() 
End Sub 
    Private Sub UserControl11_TextChange(sender As System.Object, e As System.EventArgs) Handles UserControl11.TextChange 
     MsgBox(CType(sender, TextBox).Name, MsgBoxStyle.Information) 
    End Sub 
End Class 
+0

那麼,這樣我可以在我的UC中聲明一個陰影事件,並在textbox發生text更改時引發用戶控件的Textchanged。但那樣我就會爲每個事件都做這件事。這就是爲什麼如果可能的話,我正在尋找更多「優雅」的解決方案。 –

+0

你的用戶控件是否繼承了文本框,如果是這樣,你不需要爲任何內容創建陰影,UserControl對於所有權利都是一個TextBox,所以它的TextChangedEvent將用Textbox中的文本進行更改 –

+0

因爲我是.NET中的新成員,還不明白。我現在可以繼承這個已經用xTextbox繼承的usercontrol文本框嗎?如果我可以請示範一下,告訴我應該如何看待。 –