문자열 형식의 항목과 함께 목록 상자를 사용할 때 대답을 검색했습니다. 변환 방법을 알 수 없습니다. 내 항목C# WinForms ListBox ListItems와 키/값 쌍을 사용하는 증분 검색
KeyValuePair<string, ChangeRec>
내가 키으로 검색 (컨트롤이 폼의 특정 크기 필요로 콤보를 사용할 수 없습니다) 목록 상자에 입력 검색 할 수있는
(텍스트) 유형입니다 목. 출발점으로 @Marcel Popescu에게 감사드립니다. 여기에 코드를 내 버전 (이 바르게 문자열로 KVP 항목을 시전 할 수 없기 때문에, 단지 실패 선 위에 댓글을 달았)입니다 :
private string searchString;
private DateTime lastKeyPressTime;
private void lbElementNames_KeyPress(object sender, KeyPressEventArgs e)
{
this.IncrementalSearch(e.KeyChar);
e.Handled = true;
}
private void IncrementalSearch(char ch)
{
if ((DateTime.Now - this.lastKeyPressTime) > new TimeSpan(0, 0, 1))
{
this.searchString = ch.ToString();
}
else
{
this.searchString += ch;
}
this.lastKeyPressTime = DateTime.Now;
//* code falls over HERE *//
var item =
this.lbElementNames.Items.Cast<string>()
.FirstOrDefault(it => it.StartsWith(this.searchString, true, CultureInfo.InvariantCulture));
if (item == null) return;
var index = this.lbElementNames.Items.IndexOf(item);
if (index < 0) return;
this.lbElementNames.SelectedIndex = index;
}
ListBox를 어떻게 채우십니까? 이 코드는 여기서 작동하지 않는 것을 이해하는 데 필수적입니다. – Steve
사과, 나는 그 정보를 포함하는 것을 잊었다. 데이터 (사전)는 컨트롤의 데이터 소스에 바인딩되고 DisplayMember는 Key로 설정되고 ValueMember는 Value로 설정됩니다. 데이터는 텍스트 파일에서 읽습니다. 항목 키는 파일 이름이고 항목 값은 해당 파일의 모든 정보를 포함하는 개체입니다. – MartinS