public NumberHelper() { InitializeComponent(); BinaryNumber.GotFocus += UpdateFocus; HexNumber.GotFocus += UpdateFocus; DecimalNumber.GotFocus += UpdateFocus; LostFocus += UpdateFocus; BinaryNumber.KeyPress += (sender, args) => { if (!char.IsControl(args.KeyChar) && !BinaryChars.Contains(args.KeyChar)) { args.Handled = true; } }; BinaryNumber.KeyDown += (sender, args) => { if (args.KeyCode == Keys.Up) { args.Handled = true; HexNumber.Focus(); HexNumber.SelectAll(); } }; HexNumber.KeyPress += (sender, args) => { if (!char.IsControl(args.KeyChar) && !HexChars.Contains(char.ToUpperInvariant(args.KeyChar))) { args.Handled = true; } args.KeyChar = char.ToUpperInvariant(args.KeyChar); }; HexNumber.KeyDown += (sender, args) => { if (args.KeyCode == Keys.Up) { args.Handled = true; DecimalNumber.Focus(); DecimalNumber.SelectAll(); } else if (args.KeyCode == Keys.Down) { args.Handled = true; BinaryNumber.Focus(); BinaryNumber.SelectAll(); } }; DecimalNumber.KeyPress += (sender, args) => { if (!char.IsControl(args.KeyChar) && !DecimalChars.Contains(args.KeyChar)) { args.Handled = true; } }; DecimalNumber.KeyDown += (sender, args) => { if (args.KeyCode == Keys.Down) { args.Handled = true; HexNumber.Focus(); HexNumber.SelectAll(); } }; DecimalNumber.TextChanged += (sender, args) => { if (Regex.IsMatch(DecimalNumber.Text, @"[^\-0-9]")) { DecimalNumber.Text = Regex.Replace(DecimalNumber.Text, @"[^\-0-9]", ""); } if (!Regex.IsMatch(DecimalNumber.Text, @"[0-9]")) { return; } var number = string.IsNullOrEmpty(DecimalNumber.Text) ? 0 : Convert.ToInt64(DecimalNumber.Text); SetHex(number); SetBinary(number); }; HexNumber.TextChanged += (sender, args) => { if (Regex.IsMatch(HexNumber.Text, @"[^0-9A-F]")) { HexNumber.Text = Regex.Replace(HexNumber.Text, @"[^0-9A-F]", ""); } var number = string.IsNullOrEmpty(HexNumber.Text) ? 0 : Convert.ToInt64(HexNumber.Text, 16); SetDecimal(number); SetBinary(number); }; BinaryNumber.TextChanged += (sender, args) => { if (Regex.IsMatch(BinaryNumber.Text, @"[^01]")) { BinaryNumber.Text = Regex.Replace(BinaryNumber.Text, @"[^01]", ""); } var number = string.IsNullOrEmpty(BinaryNumber.Text) ? 0 : Convert.ToInt64(BinaryNumber.Text, 2); SetHex(number); SetDecimal(number); }; }