皆さんにとって簡単なものです。
リストボックスの上にテキストボックスがあります。
テキストボックスは、リストボックス内のデータをフィルタリングするために使用されます。
だから...ユーザーがテキストボックスに入力すると、ダウン/アップ/ページダウン/ページアップのキーストロークを「トラップ」してリストボックスに転送したいと思います。
Win32 API を使用して WM_KeyDown メッセージを送信できることはわかっています。しかし、これを行うには .NET の方法が必要です。
皆さんにとって簡単なものです。
リストボックスの上にテキストボックスがあります。
テキストボックスは、リストボックス内のデータをフィルタリングするために使用されます。
だから...ユーザーがテキストボックスに入力すると、ダウン/アップ/ページダウン/ページアップのキーストロークを「トラップ」してリストボックスに転送したいと思います。
Win32 API を使用して WM_KeyDown メッセージを送信できることはわかっています。しかし、これを行うには .NET の方法が必要です。
SendKeys.Send() メソッド。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
listBox1.Focus();
SendKeys.Send(e.KeyChar.ToString());
}
リスト項目を選択できるコードを次に示します。
private void Form1_Load(object sender, EventArgs e)
{
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource=AutoCompleteSource.CustomSource;
string[] ar = (string[])(listBox1.Items.Cast<string>()).ToArray<string>();
textBox1.AutoCompleteCustomSource.AddRange(ar);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
listBox1.Text = textBox1.Text;
}
データバインディングを使用できます
listBox1.DataBindings.Add("DataSource", textBox1, "Text", true, DataSourceUpdateMode.OnPropertyChanged).
Format += (sender, e) =>
{
e.Value = _strings.FindAll(s => s.StartsWith((string) e.Value));
};
私たちの wpf アプリには、リスト ボックスをフィルター処理するテキスト ボックスがあり、previewkeyup イベントを使用します。コード内で、どのキーが押されたかを確認できます (コードを前に出さないでください。e.Key == Key.UpArrow のようなものです。どちらにしても、C# にはこのための組み込みクラスがあります)。それがホット キーの 1 つである場合は、それに応じてユーザー コントロールを操作します。
リストボックスの場合、それをユーザーコントロールに投げ込み、NavigateableListbox などと呼ばれるインターフェースを実装し、強制的に MoveUp()、MoveDown()、PageUp()、PageDown() などを実装するようにしました。 e.Key = Key.UpArrow { mylistbox.MoveUp() }