Windows Phone 72012. 2. 8. 16:13

예를 들어 전화번호를 쓰는 textbox 가 3개가 있다고 정하자

010-xxxx-xxxx

만약 010을 쓰고 다음 textbox로 이동해야 하는데 그럴려면 중간번호 쓰는곳에 focus() 함수를 호출해야한다.

그리고 이것을 감자하기 위해서 textchanged 이벤트를 등록해야 한다.

그럼 textbox.TextChanged 이벤트를 등록하고 이동할 다음 textbox에 포커스를 등록하는등 이벤트가 엄청나게 많아지고

코드가 길어진다. 머 이것을 그냥 줄여보자.

젤 좋은 방법은

해당 Panel이 StackPanel이라면 Chidren으로 등록되어 있는 textbox의 이벤트를 한번에 등록하는 방법이 가상 이상적인 방법이지만 디자이너가 디자인을 끝낸상태라 StackPanel한개에 다 TextBox가 있는게 아니라 여러패널에 나뉘어져 있다.

그렇다면 수동적으로 일일히 코드에다가 다 써야 하는가?

그것보다는 좀 효과적으로 줄여보자.

public static class EventUtil
    {
        public static void AddFocusEvent(object Ctl1, object Ctl2)
        {
            if (Ctl1 is PhoneTextBox && Ctl2 is PhoneTextBox)
            {
                (Ctl1 as PhoneTextBox).TextChanged += (s, e) =>
                {
                    if ((Ctl1 as PhoneTextBox).Text.Length == (Ctl1 as PhoneTextBox).MaxLength)
                    {
                        (Ctl2 as PhoneTextBox).Focus();
                    }
                };
            }
            else if (Ctl1 is PhoneTextBox && Ctl2 is Button)
            {
                (Ctl1 as PhoneTextBox).TextChanged += (s, e) =>
                {
                    if ((Ctl1 as PhoneTextBox).Text.Length == (Ctl1 as PhoneTextBox).MaxLength)
                    {
                        (Ctl2 as Button).Focus();
                    }
                };
            }
        }
    }

 

사용법은

해당 페이지의 behind코드에

EventUtil.AddFocusEvent(VeteransNumTB, OkBtn);

이렇게 사용하면 된다.

textbox끼리의 focus이동과 textbox와 button과의 이벤트가 등록되어 있다.

이런 focus이벤트 등록할때는 꼭 KeyUp대신 textChanged로 해야 한다.

KeyUp이벤트로 하게 되면 사용자가 text로 가는순간 발생함으로 입력전에 focus가 변경된다.

Posted by 동동(이재동)