3

我正在尝试获取一个文本框 keydown 事件来捕获退格键按下事件。我通过添加一个覆盖文本框的类来实现这一点。我不知道该怎么做是与文本框在用户控件中的类进行通信。

当用户在文本框中键入...说 abcd 或退格时,我需要更新用户控件上的某些内容。假设我想要显示文本框中有多少个字符的东西。有人可以帮我吗?这是我到目前为止所拥有的

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.TextChanged事件的处理程序。UserControl当它被调用时,事件的发送者应该是你的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 有点生疏,所以事件处理程序的语法可能不完全正确。)

基本思想是TextBoxUserControl. 这样您就可以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 回答