>백엔드 개발 >C++ >사용자 정의 이벤트 핸들러를 사용하여 C#에서 사용자 정의 자동 완성을 구현하는 방법은 무엇입니까?

사용자 정의 이벤트 핸들러를 사용하여 C#에서 사용자 정의 자동 완성을 구현하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-31 17:50:10662검색

How to Implement Custom Autocomplete in C# Using a Custom Event Handler?

사용자 정의 이벤트 핸들러를 사용한 C# 자동 완성

문제:

자동 완성 기능이 텍스트 상자에 대해 구현되고 있습니다. "[001] Last, First Middle" 형식의 데이터베이스에서 가져옵니다. 현재 구현에서는 검색을 시작하려면 "[001]"을 입력해야 합니다. 원하는 동작은 이름 입력을 기반으로 자동 완성을 허용하는 것이지만, 예를 들어 "John"은 "[001] Smith, John D"를 반환해야 합니다.

해결책:

C#에 내장된 자동 완성 기능은 접두사 기반 검색만 지원하므로 이 요구 사항에는 적합하지 않습니다. 해결 방법은 OnTextChanged 이벤트를 처리하고 원하는 동작을 프로그래밍 방식으로 구현하여 사용자 정의 자동 완성 기능을 만드는 것입니다.

구현:

ListBox가 텍스트 상자 아래에 추가되고 해당 가시성은 처음에 false로 설정됩니다. 사용자가 텍스트 상자에 텍스트를 입력하면 텍스트 상자의 OnTextChanged 이벤트가 트리거됩니다. 핸들러는 다음 단계를 수행합니다.

  1. 목록 상자에서 기존 항목을 지웁니다.
  2. 텍스트 상자의 텍스트가 비어 있으면 목록 상자를 숨깁니다.
  3. 텍스트 상자의 AutoCompleteCustomSource에 있는 값입니다.
  4. 값에 입력된 텍스트가 포함된 경우 텍스트 상자는 목록 상자에 값을 추가하고 가시성을 true로 설정합니다.

목록 상자의 항목이 선택되면 목록 상자의 SelectedIndexChanged 이벤트가 트리거되고 선택한 항목의 텍스트가 텍스트 상자의 텍스트 속성에 복사됩니다. 이렇게 하면 자동 완성 프로세스가 완료되고 목록 상자가 숨겨집니다.

코드 예:

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
    listBox1.Items.Clear();
    if (textBox1.Text.Length == 0)
    {
        hideResults();
        return;
    }

    foreach (String s in textBox1.AutoCompleteCustomSource)
    {
        if (s.Contains(textBox1.Text))
        {
            Console.WriteLine("Found text in: " + s);
            listBox1.Items.Add(s);
            listBox1.Visible = true;
        }
    }
}

void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    textBox1.Text = listBox1.Items[listBox1.SelectedIndex].ToString();
    hideResults();
}

void hideResults()
{
    listBox1.Visible = false;
}

이 솔루션은 더욱 향상될 수 있는 사용자 정의 자동 완성 기능의 기초적인 예를 제공합니다. 특정 요구 사항을 기반으로 합니다. 그러나 텍스트 입력을 처리하고 제안된 값 목록을 동적으로 업데이트하는 원리를 보여줍니다.

위 내용은 사용자 정의 이벤트 핸들러를 사용하여 C#에서 사용자 정의 자동 완성을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.