none
webcast里的那个做只能输入数字的textbox是不行的吧 RRS feed

  • 问题

  • 我照着做了一下,根本没用啊???????????
     protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
    2009年5月24日 10:37

答案

  • Hi,

    能否提供些上下文以及具体出错的现象呢? 以便做重现。

    以下代码可作为参考,控制输入的只能是数值类型。

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        base.OnKeyPress(e);
    
        NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
        string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
        string groupSeparator = numberFormatInfo.NumberGroupSeparator;
        string negativeSign = numberFormatInfo.NegativeSign;
    
        string keyInput = e.KeyChar.ToString();
    
        if (Char.IsDigit(e.KeyChar))
        {
            // Digits are OK
        }
        else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) ||
         keyInput.Equals(negativeSign))
        {
            // Decimal separator is OK
        }
        else if (e.KeyChar == '\b')
        {
            // Backspace key is OK
        }
        else if (this.allowSpace && e.KeyChar == ' ')
        {
    
        }
        else
        {
            e.Handled = true;
        }
    }
    

    Thanks.


    Microsoft Online Community Support Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年5月27日 3:18
    版主

全部回复

  • Hi,

    能否提供些上下文以及具体出错的现象呢? 以便做重现。

    以下代码可作为参考,控制输入的只能是数值类型。

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        base.OnKeyPress(e);
    
        NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
        string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
        string groupSeparator = numberFormatInfo.NumberGroupSeparator;
        string negativeSign = numberFormatInfo.NegativeSign;
    
        string keyInput = e.KeyChar.ToString();
    
        if (Char.IsDigit(e.KeyChar))
        {
            // Digits are OK
        }
        else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) ||
         keyInput.Equals(negativeSign))
        {
            // Decimal separator is OK
        }
        else if (e.KeyChar == '\b')
        {
            // Backspace key is OK
        }
        else if (this.allowSpace && e.KeyChar == ' ')
        {
    
        }
        else
        {
            e.Handled = true;
        }
    }
    

    Thanks.


    Microsoft Online Community Support Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年5月27日 3:18
    版主
  • 就是新建一个 cs 文件,然后继承 System.Windows.Forms.TextBox ,然后在里面重写 OnKeyPress 方法。

    然后在项目里用这个控件,输入中文、e文都可以,无法过滤。

    2 楼的代码我也试了下,模拟器和真机上都不成功。

    THX

    2009年5月27日 8:50
  • 为什么不用:
    InputModeEditor.SetInputMode(textbox, InputMode.Numeric);


    I'm a device.
    2009年5月30日 7:09
    版主