0

On the text box, it should allow the user to enter only six decimal places. For example, 1.012345 or 1,012345.

If seven decimal places are tried, the entry should not be allowed.

Please refer to the below code.

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; } } 

To achieve the culture neutrality, the text value is converted to double first and then the double value is converted to string.

bool value = double.TryParse(aTextValue, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out maxIntensity); if (value) { string aText = maxIntensity.ToString(); } 

Splitting the strings to separate the real part and mantissa part (both are stored are strings), then I check the length of the mantissa part. If the length of the string is more than 5, I'd like to suppress the key.

Is there aother approach to do this?

1
  • Have u tried this regex ("^(\d)*\.\d{6}$") Commented Apr 13, 2011 at 10:50

2 Answers 2

1

I've had luck with code similar to the following:

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); } } 
Sign up to request clarification or add additional context in comments.

Comments

0

I think I would solve this by using regular expressions. On the key down event you can check the regex.

Maybe you want to check this out: Regular expression for decimal number

4 Comments

@V4Vendetta: No i am not using masked text box
@Raghev: Why don't you try it out?
@V4Vendentta: i have to use only normal text box
@Raghav: I am Martijn ;) But, if you don;t want to use a masked textbox, I would use regular expressions and check it each time a key is pressed.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.