如何在条目控件为空时检测退格键

Posted

技术标签:

【中文标题】如何在条目控件为空时检测退格键【英文标题】:How to detect backspace in an Entry control when it is empty 【发布时间】:2019-07-01 03:22:55 【问题描述】:

我在 android 上使用 Xamarin.Forms。我有一个表单,它有 4 个输入控件供用户输入代码。我正在使用 TextChanged 事件来检测用户输入并自动将焦点移动到下一个控件。这部分工作正常,即当用户键入数字焦点时会自动跳转到下一个条目。但是,我需要实现相反的效果,用户应该能够点击退格按钮并且焦点应该移动到上一个控件。问题是输入控件为空时不会触发 TextChanged。我怎样才能做到这一点?我可以为android创建一个自定义渲染器来捕获文本输入吗?也许有一种方法可以使用 1 个条目,但我需要让它看起来像不同的 4 个框。

【问题讨论】:

如果有帮助,删除/退格的 ASCII 字符是 '0x7f',所以也许你可以检测到键盘输入,然后编写相应的操作? 为什么不使用Return键将焦点移到下一个控件?不建议使用Text changed事件来改变焦点,它可以处理其他逻辑事情。 【参考方案1】:

最后,我通过在 android 中实现渲染器找到了解决方案。

在共享代码(PCL)中,创建一个这样的类

public class CustomEntry:Entry

    public delegate void BackspaceEventHandler(object sender, EventArgs e);

    public event BackspaceEventHandler OnBackspace;

    public CustomEntry()
    

    

    public void OnBackspacePressed()
    
        if (OnBackspace != null)
        
            OnBackspace(null, null);
        
    

然后,在你的 android 项目中创建一个像这样的渲染器:

 public class CustomEntryRenderer: EntryRenderer
 
    public override bool DispatchKeyEvent(KeyEvent e)
    
        if (e.Action == KeyEventActions.Down)
        
            if (e.KeyCode == Keycode.Del)
            
                if (string.IsNullOrWhiteSpace(Control.Text))
                
                    var entry = (PasswordBox)Element;
                    entry.OnBackspacePressed();
                
            
        
        return base.DispatchKeyEvent(e);
    

    protected override void 
    OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Entry> e)
    
        base.OnElementChanged(e);
    

然后像这样使用它:

Entry1.OnBackspace += Entry1BackspaceEventHandler;

public void Entry1BackspaceEventHandler()

//things you want to do

【讨论】:

很好的答案.. 我不知道为什么人们不赞成这个答案。像魅力一样工作.. 小修改 void Entry1BackspaceEventHandler(object sender, Xamarin.Forms.TextChangedEventArgs e) 你是2021年的英雄,谢谢。效果很好。

以上是关于如何在条目控件为空时检测退格键的主要内容,如果未能解决你的问题,请参考以下文章

如何检测是不是按下退格键?

如何将加速键赋予键盘退格键

如何检测网站上是不是按下了退格键?

如何使用jQuery捕获退格键? [复制]

如何将退格键更改为 '\b'?

前端javascript如何阻止按下退格键页面回退 但 不阻止文本框使用退格键删除文本