我正在做一个Financial Winforms应用程序,并且在控件方面遇到了一些问题.
我的客户需要在整个地方插入小数值(价格,折扣等),我想避免一些重复验证.
所以我立刻尝试了适合我需要的MaskedTextBox(如"€00000.00"这样的面具),如果它不是焦点和面具的长度.
我无法预测我的客户将要进入应用程序的数量有多大.
我也不能指望他用00开始一切来到逗号.一切都应该是键盘友好的.
我是否遗漏了某些东西或者除了编写自定义控件之外没有办法用标准的Windows窗体控件实现这一点?
您将需要一个自定义控件.只需在控件上捕获Validating事件,并检查字符串输入是否可以解析为十进制.
这两个覆盖方法为我做了(免责声明:此代码尚未生产.您可能需要修改)
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); }