2

我记得在 getter/setter 上使用了一些属性,它将输入限制为特定的数据类型、长度等。IE [Attribute something something]。

有任何想法吗?

谢谢

4

4 回答 4

2

一种方法(如果您想继续使用标准文本框)是为文本框的文本更改事件创建一个事件,并在其中阅读文本以确保它仅包含数字(并且双重情况下的可选句点)

于 2012-06-29T17:25:32.937 回答
2

你的意思是ValidateInput可用的属性System.Web.Mvc吗?

MaskedTextBox此外,如果您正在使用 WinForms ,您可能会使用 a 。

于 2012-06-29T17:36:41.490 回答
1

窗体?您是否考虑过使用蒙版的文本框控件?

http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx

于 2012-06-29T18:09:33.557 回答
0

窗体?为什么不使用 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;
        }
    }

这将拒绝输入任何与数值不一致的模式。减号只允许在字符串的开头(表示负数)和eor之后E表示负指数。加号遵循与减号相同的规则。只允许一个小数点,并且必须跟在至少一个数字后面。只允许使用一个eE,并且它必须跟在小数点之后,并且小数点后至少有一个数字。

如果会干扰程序功能的其他方面,您还可以允许使用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);
    }            
}
于 2012-06-29T17:21:03.707 回答