当前位置:  开发笔记 > 开发工具 > 正文

Windows窗体中的十进制文本框

如何解决《Windows窗体中的十进制文本框》经验,为你挑选了2个好方法。

我正在做一个Financial Winforms应用程序,并且在控件方面遇到了一些问题.

我的客户需要在整个地方插入小数值(价格,折扣等),我想避免一些重复验证.

所以我立刻尝试了适合我需要的MaskedTextBox(如"€00000.00"这样的面具),如果它不是焦点和面具的长度.

我无法预测我的客户将要进入应用程序的数量有多大.

我也不能指望他用00开始一切来到逗号.一切都应该是键盘友好的.

我是否遗漏了某些东西或者除了编写自定义控件之外没有办法用标准的Windows窗体控件实现这一点?



1> Nick..:

您将需要一个自定义控件.只需在控件上捕获Validating事件,并检查字符串输入是否可以解析为十进制.



2> Abel Gaxiola..:

这两个覆盖方法为我做了(免责声明:此代码尚未生产.您可能需要修改)

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if (!char.IsNumber(e.KeyChar) & (Keys)e.KeyChar != Keys.Back 
            & e.KeyChar != '.')
        {
            e.Handled = true;
        }

        base.OnKeyPress(e);
    }

    private string currentText;

    protected override void OnTextChanged(EventArgs e)
    {
        if (this.Text.Length > 0)
        {
            float result;
            bool isNumeric = float.TryParse(this.Text, out result);

            if (isNumeric)
            {
                currentText = this.Text;
            }
            else
            {
                this.Text = currentText;
                this.Select(this.Text.Length, 0);
            }
        }
        base.OnTextChanged(e);
    }

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有