处理usercontrol内部的控制事件

时间:2012-12-23 00:10:01

标签: vb.net

很快我就寻求帮助来读取usercontrol里面的文本框的属性 Accessing to control inside of usercontrol 正如我所建议的那样,我创建了一个名为xTextBox的非常简单的公共类,并在我的usercontrol中将其用作文本框。工作正常。

Public Class xTextBox
    Inherits TextBox
End Class

现在我可以从主程序中读取包含该usercontrol的xTextbox上的属性:

Dim s As Integer = myUserControl.xTextBox1.SelectionStart

但现在是一个问题,我无法在主程序中获取该文本框的事件。 也许我可以声明'Shadows Event TextChanged ...'等等,但是我会在用户控制的不同情况下需要更多的事件,并且故意提高每一个事件在实际编程方面看起来并不优雅。

如何将xTextbox的事件发送到主程序?

1 个答案:

答案 0 :(得分:4)

如果您的新UserControl只有一个控件和Inherits TextBox,那么您可以使用Property Editor或者使用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

或者,如果您的UserControl中包含多个自定义文本框,您可以创建自定义事件并在UserControl上的常见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