C# 限制文本框中的字符

C# 限制文本框中的字符,c#,winforms,C#,Winforms,在文本框中,用户只能输入六位小数。例如,1.012345或1012345 如果尝试使用小数点后七位,则不允许输入 请参考以下代码 private void textBox1_KeyDown_1(object sender, KeyEventArgs e) { bool numericKeys = ( ( ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCod

在文本框中,用户只能输入六位小数。例如,1.012345或1012345

如果尝试使用小数点后七位,则不允许输入

请参考以下代码

private void textBox1_KeyDown_1(object sender, KeyEventArgs e)
{
    bool numericKeys = (
        ( ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
           (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)) &&
              e.Modifiers != Keys.Shift)  ||
              e.KeyCode == Keys.OemMinus  ||
              e.KeyCode == Keys.OemPeriod ||
              e.KeyCode == Keys.Decimal   ||
              e.KeyCode == Keys.Oemcomma
        );

    bool navigationKeys = (
        e.KeyCode == Keys.Up ||
        e.KeyCode == Keys.Right ||
        e.KeyCode == Keys.Down ||
        e.KeyCode == Keys.Left ||
        e.KeyCode == Keys.Home ||
        e.KeyCode == Keys.End ||
        e.KeyCode == Keys.Tab);

    bool editKeys = (e.KeyCode == Keys.Delete ||
                     e.KeyCode == Keys.Back);

    TextBox aTextbox = (TextBox)sender;
    aTextbox.Text = "2,33333";

    if (!string.IsNullOrEmpty(aTextbox.Text))
    {
        double maxIntensity;
        string aTextValue = aTextbox.Text;
        bool value = double.TryParse(aTextValue,
                                     NumberStyles.Any,
                                     CultureInfo.InvariantCulture.NumberFormat,
                                     out maxIntensity);

        if (value)
        {
            string aText = maxIntensity.ToString();
            MessageBox.Show("the value is {0}", aText);
            string[] args = aText.Split('.');

            if (numericKeys)
            {
                bool handleText = true;

                if (args.Length > 2)
                {
                    handleText = false;
                }
                else
                {
                    if (args.Length == 2 && args[1] != null && args[1].Length > 5)
                    {
                        handleText = false;
                    }
                }

                if (!handleText)
                {
                    e.SuppressKeyPress = true;
                    e.Handled = true;
                }
            }
        }
    }

    if (!(numericKeys || editKeys || navigationKeys))
    {
        e.SuppressKeyPress = true;
        e.Handled = true;
    }
}
拆分字符串以分离实际部分和尾数部分(两者都存储为字符串),然后检查尾数部分的长度。如果字符串的长度大于5,我希望抑制该键


有没有其他方法可以做到这一点?

我想我应该使用正则表达式来解决这个问题。在key down事件中,您可以检查正则表达式


也许您想检查一下:

我很幸运地使用了类似于以下内容的代码:

public class RegexMaskedTextBox : TextBox
{
    private Regex _regex = new Regex(string.Empty);

    public string RegexPattern
    {
        get { return _regex.ToString(); }
        set { _regex = new Regex(value); }
    }

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        string sNewText = this.Text;
        string sTextToInsert = e.KeyChar.ToString();
        if (this.SelectionLength > 0)
        {
            sNewText = this.Text.Remove(this.SelectionStart, this.SelectionLength);
        }
        sNewText = sNewText.Insert(this.SelectionStart, sTextToInsert);
        if (sNewText.Length > this.MaxLength)
        {
            sNewText = sNewText.Substring(0, this.MaxLength);
        }
        e.Handled = !_regex.IsMatch(sNewText);
        base.OnKeyPress(e);
    }
}

@V4Vendetta:不,我没有使用蒙面文本box@Raghev:你为什么不试试?@V4Vendentta:我只能用普通文本box@Raghav:我是玛蒂恩;)但是,如果你没有;I don’我不想使用屏蔽文本框,我会使用正则表达式,并在每次按下一个键时检查它。您是否尝试过这个正则表达式(“^(\d)*\。\d{6}$”)
public class RegexMaskedTextBox : TextBox
{
    private Regex _regex = new Regex(string.Empty);

    public string RegexPattern
    {
        get { return _regex.ToString(); }
        set { _regex = new Regex(value); }
    }

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        string sNewText = this.Text;
        string sTextToInsert = e.KeyChar.ToString();
        if (this.SelectionLength > 0)
        {
            sNewText = this.Text.Remove(this.SelectionStart, this.SelectionLength);
        }
        sNewText = sNewText.Insert(this.SelectionStart, sTextToInsert);
        if (sNewText.Length > this.MaxLength)
        {
            sNewText = sNewText.Substring(0, this.MaxLength);
        }
        e.Handled = !_regex.IsMatch(sNewText);
        base.OnKeyPress(e);
    }
}