我正在做一个 Financial Winforms 应用程序,但在控件方面遇到了一些问题。
我的客户需要在各处插入小数值(价格、折扣等),我想避免一些重复验证。
因此,如果不是因为焦点和蒙版的长度,我立即尝试了能够满足我的需求的 MaskedTextBox(带有“€ 00000.00”之类的蒙版)。
我无法预测我的客户将输入应用程序的数字有多大。
我也不能指望他一切都以 00 开头才能到达逗号。一切都应该是键盘友好的。
我是否遗漏了某些内容,或者根本没有办法(除了编写自定义控件之外)使用标准 Windows 窗体控件来实现此目的?
这两个重写方法为我做到了(免责声明:此代码尚未投入生产。您可能需要修改)
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)