3

バックスペースキーダウンイベントをトラップするために、テキストボックスのキーダウンイベントを取得しようとしています。テキストボックスをオーバーライドするクラスを追加することで、それが機能します。方法がわからないのは、テキストボックスがユーザーコントロールにあるクラスと通信することです。

ユーザーがテキストボックスに入力すると... abcdまたはbackspaceと言うと、ユーザーコントロールで何かを更新する必要があります。テキストボックスに何文字あるかを表示するものが欲しいとしましょう。誰かがそれを手伝ってくれますか。これが私がこれまでに持っているものです

Option Strict On
Imports System.Text.RegularExpressions

Partial Public Class Page
    Inherits UserControl

    Public Sub New()
        InitializeComponent()
        Dim textbox As New MyTextBox() With {.Width = 300, .Height = 100}
        LayoutRoot.Children.Add(textbox)
    End Sub
End Class

Public Class MyTextBox
    Inherits TextBox
    Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)
        MyBase.OnKeyDown(e)
        If e.Key = Key.Back Then
            e.Handled = True
            MyBase.OnKeyDown(e)

        ElseIf e.Key = Key.Delete Then
            e.Handled = True
            MyBase.OnKeyDown(e)
        End If
    End Sub
End Class

ありがとうシャノン

4

2 に答える 2

2

これを行うためにサブクラス化する必要はありませんTextBox。代わりに、TextBox.TextChangedUserControlイベントのハンドラーをクラスに追加します。これが呼び出されると、イベントの送信者はあなたのTextBox. その後、そこからテキストを取得して、必要なことを実行できます。

更新:コメントに基づいて、以下が機能するはずです:

Partial Public Class Page
    Inherits UserControl

    Private TextBox1 as TextBox

    Public Sub New()
        InitializeComponent()
        TextBox1 = New TextBox() With {.Width = 300, .Height = 100}
        LayoutRoot.Children.Add(textbox)
    End Sub

    Private Sub OnTextChanged(sender as Object, e as TextChangedEventArgs) Handles TextBox1.TextChanged
        If e.Key = Key.Back Then
            e.Handled = True
        ElseIf e.Key = Key.Delete Then
            e.Handled = True
        End If
    End Sub
End Class

(私の VB は少し錆びているため、イベント ハンドラーの構文が完全に正しくない可能性があります。)

TextBox基本的な考え方は、内でテキストが変更されたときに通知を受けることUserControlです。このようにして、必要に応じて の他の部分を変更できますUserControl

于 2009-05-22T17:29:18.157 に答える
0

あなたは間違った方法で考えているかもしれません。Silverlight を使用しているため、バインディング式を使用してこの情報を取得できます。簡単な例として、テキスト ボックスの文字数を知りたいと言いました。これは、次の xaml で実現できます。

    <TextBox x:Name="txtInput" />
    <TextBlock Text="{Binding ElementName=txtInput, Path=Text.Length}" />
于 2009-05-22T17:28:46.987 に答える