c# - 检测 KeyDown 上的退格键

标签 c# .net textbox onkeydown

我正在开发一个 silverlight 网络应用程序。它与发送 SMS 的模块交互。我想将文本限制为 160 并显示一个计数器。我是这样做的:

public partial class SendSMSView
{
    public SendSMSView()
    {
       InitializeComponent();
       ApplyTheme();
    }

    protected void tbMessage_KeyDown(object sender, KeyEventArgs e)
    {
        count = 160 - this.tbMessage.Text.Length;
        this.lblCount.Content = count.ToString();
    }
}

这适用于除退格键和删除键之外的所有键。当然,它就是这样运作的。我对此进行了更多研究并尝试覆盖 keydown 事件,因此我添加了以下代码片段:

public class CustomTextBox : TextBox
{
    public CustomTextBox(): base()
    {
    }

    protected override void OnKeyDown(KeyEventArgs e)
    {
        e.handler=false;
        base.OnKeyDown(e);
        //this place
    }
}

在 OnKeyDown 函数中,我获取了所有已注册的击键。在这里将 Handler 设置为 false 没有帮助,我仍然无法使用退格键来触发 tbMessage_KeyDow。

我想以某种方式从//这个地方强制调用 tbMessage_KeyDow 函数以退格。

我搜索了 MSDN,发现可以重写 IsInputKey 以返回 true,以便 onKeyDown 也响应它,但我的框架既没有 IsInputKey 也没有 PreviewKeyPress。是否有将退格键注册为输入键或调用 tbMessage_KeyDow [这是非常粗略的方法] 的解决方法?请帮忙。

最佳答案

试试这个....

如果你想检测文本框中按下的键上的退格键。我们建议您可以尝试在文本框的 KeyUp 事件中而不是 KeyDown 事件中执行。 例如:

   <TextBox x:Name="txt" KeyDown="txt_KeyDown" Text="Hello" KeyUp="txt_KeyUp"></TextBox>    

代码隐藏:

    private void txt_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Back)
        {
            MessageBox.Show(this.txt.Text);
        }
    } 

或者您可以这样做...通过创建用户控件...

public partial class Page : UserControl {

    private TextBox TextBox1;

    public Page() {
        InitializeComponent();
        TextBox1 = new TextBox();
        Width = 300;
        Height = 100;
        LayoutRoot.Children.Add(textbox);
        OnTextChanged(((object)(sender)), ((TextChangedEventArgs)(e)));
        TextBox1.TextChanged;
        if (e.Key == Key.Back) {
            e.Handled = true;
        }
        else if (e.Key == Key.Delete) {
            e.Handled = true;
        }
    }
}

关于c# - 检测 KeyDown 上的退格键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917388/

相关文章:

C# MySQL 中的连接太多

javascript - jQuery获取文本框的值

javascript - 为什么我的文本框的 onchange 事件会在模糊时触发 - 不是每个键入的字符都会触发?

c# - 选择投影中的索引

c# - 获取字典中的最后一个元素?

c# - 为什么我的 UserControl 不显示在设计器中?

mysql - 在 ASP.NET、Restful Web 服务中将 MySQL 数据显示为 JSON?

.NET - WinForm 文本框 - Focus 和 SelectedText

c# - 使用 JwtAuthForWebAPI 的 Web APi2 身份验证不接受 JWT token

c# - 使用数字作为属性名称反序列化 JSON