0

すぐに、usercontrol内にあるテキストボックスのプロパティを読み取るためのヘルプを求めました。
usercontrol内のコントロールへのアクセス 提案されたように、xTextBoxという名前の非常に単純なパブリッククラスを1つ作成し、それをusercontrolのテキストボックスとして使用します。それはうまくいきます。

Public Class xTextBox
    Inherits TextBox
End Class

これで、そのユーザーコントロールを含むメインプログラムからそのxTextboxのプロパティを簡単に読み取ることができます。

Dim s As Integer = myUserControl.xTextBox1.SelectionStart

しかし、今はメインプログラムでそのテキストボックスのイベントを取得できないという問題があります。「ShadowsEventTextChanged...」などを宣言できるかもしれませんが、ユーザーコントロールが行われるさまざまな状況でさらに多くのイベントが必要になり、実際のプログラミングではすべてを意図的に上げることはエレガントに見えません。

それらのxTextboxのイベントをメインプログラムに取得するにはどうすればよいですか?

4

1 に答える 1

4

新しいUserControlにコントロールが1つだけあり、TextBoxを継承している場合は、プロパティエディターを使用するか、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に複数のカスタムTextBoxが含まれている場合は、カスタムイベントを作成し、それを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
于 2012-12-23T00:40:59.080 に答える