본문 바로가기
프로그래밍 언어/C#

[C#] Tab / Shift + Tab 코딩

by Jinwood 2019. 6. 25.
반응형

C# 폼에서 여러 개의 TextBox를 생성했을 경우, Property에서 TabIndex 순서를 설정함으로써

Tab 또는 Shift + Tab 기능을 구현할 수 있다.

 

하지만 특정한 TextBox가 GroupBox에 속해있을 때 TabIndex 순서대로 Tab / Shift + Tab이 구현되지 않는다.

그리고 여러개의 UI를 생성하고 지우다 보면 TabIndex가 섞여 바로잡기 힘들 때가 있다.

 

복잡하다 싶으면 코드로 구현하는 방법이 제일 편리한 것 같다.

아래 코드는 6개의 TextBox 리스트를 미리 만들어두고

Tab / Shift + Tab이 눌러졌을 때 해당 TextBox에 포커싱을 하는 코드이다.

 

여기서 주의할 점은 두가지로

  1. KeyDown 이벤트를 사용한다.(KeyPress 이벤트 X)

  2. Shift + Tab 이벤트 코드가 Tab 이벤트 코드보다 먼저 작성되어야 한다.

 

%만약 Shift + Tab 이나 Tab 을 눌렀을 때 해당 TextBox의 Text들을 모두 선택하려면

Focus(); 뒤에 textboxes[ j +1 ].SelectAll(); 을 추가하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private void Textbox_KeyDown(object sender, KeyEventArgs e)
{
    //Text Box에 커서가 있을 때, tab / shift+tab 버튼 클릭 이벤트
 
    string sender_name = ((TextBox)sender).Name;
    List textboxes = new List { tbox1, tbox2, tbox3, tbox4, tbox5, tbox6 }; //모든 textbox 변수를 리스트에 담는다.
 
    //Shift + Tab
    if (e.Modifiers == Keys.Shift && e.KeyCode == Keys.Tab)
    {
       for (int j = 0; j < textboxes.Count; j++)
       {
            if (sender_name == textboxes[j].Name)
            {
                if (j - 1 > 0) { textboxes[j - 1].Focus(); }
                else { textboxes.First().Focus(); }
                break;
            }
        }
    }
    //Tab
    else if (e.KeyCode == Keys.Tab || e.KeyCode == Keys.Enter)
    {
        for (int i = 0; i < textboxes.Count; i++)
        {
            if (sender_name == textboxes[i].Name)
            {
               if (i + 1 < textboxes.Count) { textboxes[i + 1].Focus(); }
               else { textboxes.Last().Focus(); }
               break;
             }
         }
     }
}
cs

 

반응형

댓글