我记得在 getter/setter 上使用了一些属性,它将输入限制为特定的数据类型、长度等。IE [Attribute something something]。
有任何想法吗?
谢谢
我记得在 getter/setter 上使用了一些属性,它将输入限制为特定的数据类型、长度等。IE [Attribute something something]。
有任何想法吗?
谢谢
一种方法(如果您想继续使用标准文本框)是为文本框的文本更改事件创建一个事件,并在其中阅读文本以确保它仅包含数字(并且双重情况下的可选句点)
你的意思是ValidateInput
可用的属性System.Web.Mvc
吗?
MaskedTextBox
此外,如果您正在使用 WinForms ,您可能会使用 a 。
窗体?您是否考虑过使用蒙版的文本框控件?
http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx
窗体?为什么不使用 NumericUpDown?
http://msdn.microsoft.com/en-us/library/57dy4d56.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.aspx
如果你需要科学记数法,你可以这样做:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
TextBox tBox = (TextBox)sender;
if (!((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9)
|| (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)
|| (e.KeyCode == Keys.Decimal && !(tBox.Text.Contains('.'))
&& !(tBox.Text.Length == 0)
&& !((tBox.Text.Length == 1)
&& (tBox.Text.Contains('-') || tBox.Text.Contains('+'))))
|| (e.KeyCode == Keys.OemPeriod && !(tBox.Text.Contains('.'))
&& !(tBox.Text.Length == 0)
&& !((tBox.Text.Length == 1)
&& (tBox.Text.Contains('-') || tBox.Text.Contains('+'))))
|| (e.KeyCode == Keys.Subtract && ((tBox.Text.Length == 0) ||
tBox.Text.EndsWith("e") || tBox.Text.EndsWith("E")))
|| (e.KeyCode == Keys.OemMinus && ((tBox.Text.Length == 0) ||
tBox.Text.EndsWith("e") || tBox.Text.EndsWith("E")))
|| (e.KeyCode == Keys.Add && ((tBox.Text.Length == 0) ||
tBox.Text.EndsWith("e") || tBox.Text.EndsWith("E")))
|| (e.KeyCode == Keys.Oemplus && ((tBox.Text.Length == 0) ||
tBox.Text.EndsWith("e") || tBox.Text.EndsWith("E")))
|| e.KeyCode == Keys.Delete
|| e.KeyCode == Keys.Back
|| e.KeyCode == Keys.Left
|| e.KeyCode == Keys.Right
|| (e.KeyCode == Keys.E) && !(tBox.Text.Contains('e')) &&
(tBox.Text.Contains('.') && !tBox.Text.EndsWith("."))))
{
e.SuppressKeyPress = true;
}
}
这将拒绝输入任何与数值不一致的模式。减号只允许在字符串的开头(表示负数)和e
or之后E
表示负指数。加号遵循与减号相同的规则。只允许一个小数点,并且必须跟在至少一个数字后面。只允许使用一个e
或E
,并且它必须跟在小数点之后,并且小数点后至少有一个数字。
如果会干扰程序功能的其他方面,您还可以允许使用Help
,Tab
等键。
请注意,这并不能防止不完整的数字(即:1.37E-
或被-13.
输入,因此您可能希望在任何情况下检查字符串。这至少会拒绝任何立即无效的条目。
您可能会做类似的事情(在同一个处理程序中,在其他逻辑之前):
if (e.KeyCode == Keys.Enter)
{
textBox1_Validating(sender, new CancelEventArgs());
return;
}
以上仅给输入键提供了正常的输入“感觉”(强制验证)。离开文本框(失去焦点)也会触发验证,您可能会执行以下操作:
private void textBox1_Validating(object sender, CancelEventArgs e)
{
TextBox tBox = (TextBox)sender;
double tstDbl;
if (!double.TryParse(tBox.Text, out tstDbl))
{
//handle bad input
}
else
{
//double value OK
doSomething(tstDbl);
}
}