예제 #1
0
        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);
            };
        }