diff --git a/BizHawk.MultiClient/AVOut/NumericTextBox.cs b/BizHawk.MultiClient/AVOut/NumericTextBox.cs new file mode 100644 index 0000000000..fc1cde62d6 --- /dev/null +++ b/BizHawk.MultiClient/AVOut/NumericTextBox.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Globalization; + +namespace BizHawk.MultiClient.AVOut +{ + // http://msdn.microsoft.com/en-us/library/ms229644%28v=vs.80%29.aspx + public class NumericTextBox : TextBox + { + // Restricts the entry of characters to digits (including hex), the negative sign, + // the decimal point, and editing keystrokes (backspace). + protected override void OnKeyPress(KeyPressEventArgs e) + { + base.OnKeyPress(e); + + NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat; + string decimalSeparator = numberFormatInfo.NumberDecimalSeparator; + string groupSeparator = numberFormatInfo.NumberGroupSeparator; + string negativeSign = numberFormatInfo.NegativeSign; + + string keyInput = e.KeyChar.ToString(); + + if (Char.IsDigit(e.KeyChar)) + { + // Digits are OK + } + else if (keyInput.Equals(decimalSeparator) && AllowDecimal) + { + // Decimal separator is OK + } + else if (keyInput.Equals(negativeSign) && AllowNegative) + { + // Negative is OK + } + else if (keyInput.Equals(groupSeparator)) + { + // group seperator is ok + } + else if (e.KeyChar == '\b') + { + // Backspace key is OK + } + // else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0) + // { + // // Let the edit control handle control and alt key combinations + // } + else if (AllowSpace && e.KeyChar == ' ') + { + + } + else + { + // Swallow this invalid key and beep + e.Handled = true; + // MessageBeep(); + } + } + + public int IntValue { get { return Int32.Parse(this.Text); } } + public decimal DecimalValue { get { return Decimal.Parse(this.Text); } } + public bool AllowSpace { set; get; } + public bool AllowDecimal { set; get; } + public bool AllowNegative { set; get; } + } +}