반응형
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 |
반응형
'프로그래밍 언어 > C#' 카테고리의 다른 글
[C#] 이미지 투명화(배경제거) - #1 (0) | 2021.04.13 |
---|---|
[C#] OpenFileDialog를 이용하여 파일 불러오기 (0) | 2021.04.13 |
[C#] 바로가기 생성 방법 (0) | 2020.07.30 |
[C#] 파일 이동, 복사, 제거 방법 (0) | 2020.07.30 |
[C#] Eval 사용법 (0) | 2020.04.14 |
댓글