TextBoxカスタムMac入力ボックスクラス

5885 ワード

using System.Windows.Controls;



namespace test

{

    public class MacTextBox : TextBox

    {

        private string _lastText = "";

        protected override void OnTextChanged(TextChangedEventArgs e)

        {

            string text = Text;

            if (PrepareText(ref text))

            {

                Text = text;

                _lastText = Text;

            }

            else

            {

                Text = _lastText;

            }



            if (Text.Length > 0)

                CaretIndex = Text[Text.Length - 1] == '-' ? Text.Length - 1 : Text.Length;

            e.Handled = true;

            base.OnTextChanged(e);

        }



        private bool PrepareText(ref string text)

        {

            if (text.Length > 17)

                return false;



            text = text.ToUpper();

            string t = "";



            foreach (char c in text)

            {

                if ((c >= 48 && c <= 57) ||

                    (c >= 65 && c <= 70))

                {

                    t += c;

                    if (t.Length == 2 ||

                        t.Length == 5 ||

                        t.Length == 8 ||

                        t.Length == 11 ||

                        t.Length == 14)

                    {

                        t += "-";

                    }

                }

                else if (c != ':' && c != '-')

                {

                    return false;

                }

            }



            if (t.EndsWith("-"))

                t = t.Remove(t.Length - 1);



            if (t.Length > 17)

                return false;

            text = t;

            return true;

        }  

    }

}