【问题标题】:How to permit all numeric keys [duplicate]如何允许所有数字键[重复]
【发布时间】:2011-11-02 14:27:37
【问题描述】:

可能重复:
How do I get a TextBox to only accept numeric input in WPF?

我有一个文本框,我只想接受数字键以及删除和退格键。

我可以很容易地允许删除和退格,但是有没有办法允许所有数字键作为一个组(例如 Key.Numeric)而不是单独进行?我使用 wpf 所以它的 windows.input.key 而不是 forms.key。

【问题讨论】:

    标签: c# wpf .net-4.0


    【解决方案1】:

    如果您正在搜索 WPF 的屏蔽文本框,您可以尝试 this 库。 Here你可以找到一个实现的例子。

    Ps 我发现了一些这样的文本框的旧样本。您需要连接到 textChanged 事件。我知道这不是一个完美的解决方案,但可能会给你基本的想法:

    int state = 0;
    private void IPAddressTxtBox_TextChanged(object sender, TextChangedEventArgs e)
    {
                if (state != 1)
                {
                    char[] allowedChars = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' };
                    string inputText = this.IPAddressTxtBox.Text;
    
                    string result = "";
                    foreach (char c in inputText)
                    {
                        if (allowedChars.Contains(c))
                        {
                            result += c.ToString();
                        }
                    }
                    if (!this.IPAddressTxtBox.Text.Equals(result))
                    {
                        this.IPAddressTxtBox.Text = result;
                        this.state = 1;
                        this.IPAddressTxtBox.SelectionStart = this.IPAddressTxtBox.Text.Length;
                    }
    
                }
                else if (state == 1)
                {
                    state = 2;
                }
            }
    

    【讨论】:

      【解决方案2】:

      数字键被标记为D0 ... D9,但您可能不想依赖这是顺序枚举值。

      您可以创建静态查找:

      static HashSet<Key> numKeys = new HashSet<Key> { Key.D0, ... };  
      
         if (numKeys.Contains(k)) ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-22
        • 2019-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多