IT/C#

[C#] ComboBox AutoComplete 기능 총정리. 콤보박스 아이템 추가하기+삭제하기+검색하기(자동완성 필터 기능 추가하기).

Ella.J 2024. 1. 11. 16:37
728x90
반응형

 

콤보박스 아이템 리스트를 추가하고, 삭제하고, 검색하는 기능까지 알아보도록 합시다👍

 

먼저, 예시를 보여드리겠습니다.

제가 좋아하는 Johnny Stimson😍의 노래 리스트를 먼저 ComboBox에 추가해 뒀고,

콤보박스에서 검색하는 화면을 녹화했습니다.

알파벳 한 글자만 입력해도 자동 완성이 되는 모습을 볼 수 있습니다.

아이템에 해당하는 값이 없으면 안 나오고요.

 

 

제가 textBox1에 TEST를 입력하고 ADD 버튼을 눌러 콤보박스에 추가했습니다.

그리고 t를 입력하면 콤보박스에 T-shirt와 TEST 두 가지 경우가 있기 때문에 위와 같이 선택지가 T로 시작하는 아이템들로 정렬이 됩니다.

 

TEST를 DELETE로 지우고 다시 검색하면 T-shirt만 나오게 됩니다.

 

 

본격적으로 프로그램을 어떻게 해야 하는지 알아봅시다.

먼저, 저는 이렇게 TextBox, Button 두 개, 그리고 ComboBox를 배치했습니다.

ComboBox에서 검색(=자동완성)을 사용하기 위해 속성 창에서 두 가지 옵션을 지정해 줍니다. (하단 이미지 참고)

코드 상에서 설정해 주려면 아래와 같이 사용합니다.

comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;

comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

여러 가지 옵션이 있지만 일단은 사용자 지정 CustomSource를 이용하여 자동완성이 되는 코드를 아래에서 확인해 보겠습니다.

 

위와 같이 속성을 지정해 주고 아래와 같이 코드를 작성합니다.

 

[소스코드]

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
public List<string> JohnnyStimsonSongs = new List<string>() { "All I Want Is You"
        "Best Day Ever""wishyouwerehere""Flower""Gimme Gimme""Pink Lemonade"
        "Smile""T-shirt""You're Not There""Zombies" };
public AutoCompleteStringCollection src = new AutoCompleteStringCollection();
public void SetComboBoxItem()
{
    comboBox1.Items.Clear();
    src.Clear();
    foreach (var item in JohnnyStimsonSongs)
    {
        comboBox1.Items.Add(item);
        src.Add(item);
    }
    comboBox1.AutoCompleteCustomSource = src;
    if (comboBox1.Items.Count > 0) comboBox1.SelectedIndex = 0;
}
private void btnAdd_Click(object sender, EventArgs e)
{
    JohnnyStimsonSongs.Add(textBox1.Text);
    SetComboBoxItem();
}
private void btnDelete_Click(object sender, EventArgs e)
{
    if (comboBox1.SelectedIndex < 0return;
    JohnnyStimsonSongs.Remove(comboBox1.SelectedItem.ToString());
    SetComboBoxItem();
}
cs

 

전역변수로 string List를 만들어주고, Add와 Delete를 하는 경우 List에서 추가, 삭제한 후

SetComboBoxItem()을 호출해 리스트를 Clear 해주고 다시 Source를 추가해 줍니다.

AutoCompleteStringCollection src가 콤보박스 검색에 필요한 리스트이고,

comboBox1.AutoCompleteCustomSource = src;

위 줄을 통해 자동완성 Custom Source에 등록해 줍니다.

이렇게 하면 위의 캡처와 같이 자동완성을 할 수 있습니다.

 


AutoComplete 총정리.

 

사용자 지정 Custom Source를 이용한 방법뿐만 아니라, 다른 Mode와 Source 종류에 대해 알아보겠습니다.

 

AutoCompleteMode.

  • None : 자동완성 사용 안 함.
  • Suggest : a로 시작하는 아이템을 제안함.
  • Append : a로 시작하는 아이템이 자동으로 채워짐.
  • ⭐ SuggestAppend : a로 시작하는 아이템을 제안도 하고, 자동으로 채워주기도 함.

 

AutoCompleteSource.

  • None : 자동완성 Source 없음. 사용 안 함.
  • FileSystem : FileSystem을 소스로 지정. 현재 최상위 드라이브에서 파일을 검색한 결과가 나옴.
  • FileSystemDirectories : 파일 이름이 아닌 Directory 이름만 자동으로 완성되도록 지정. 현재 최상위 드라이브에서 검색하는데 폴더만 나옴.
  • HistoryList : 기록 목록에서 검색.
  • RecentlyUsedList : 가장 최근에 사용된 URL 목록에서 검색.
  • AllUrl : HistoryList 및 RecentUsedList에 해당하는 항목을 소스로 지정.
      • 위 3가지 검색 결과는 아래와 같이 나옴.
  • AllSystemSources : FileSystem 및 AllUrl에 해당하는 항목을 소스로 지정. 다 검색 가능.
  • CustomSource : 위에 예시와 같이 사용자가 지정한 Source, AutoCompleteStringCollection에서 검색.
  • ⭐ ListItems : ComboBox에 현재 들어있는 Items 리스트에서 검색. 제일 간단한 방법.

 

콤보박스를 File Explorer 같은 걸로 사용하는 경우 FileSystem이나 AllSystemSources 등을 사용하면 좋겠지만, 간단하게 콤보박스 리스트에 있는 내용만 검색하는 경우에는 ListItems이 제일 많이 쓰이고 간단하기 때문에, 사용자가 어떻게 사용할지에 따라 다르게 지정해서 써주면 됩니다.

 

728x90
반응형