14

皆さんにとって簡単なものです。

リストボックスの上にテキストボックスがあります。

テキストボックスは、リストボックス内のデータをフィルタリングするために使用されます。

だから...ユーザーがテキストボックスに入力すると、ダウン/アップ/ページダウン/ページアップのキーストロークを「トラップ」してリストボックスに転送したいと思います。

Win32 API を使用して WM_KeyDown メッセージを送信できることはわかっています。しかし、これを行うには .NET の方法が必要です。

4

5 に答える 5

15

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;
        }
于 2009-08-12T04:37:10.400 に答える
1

データバインディングを使用できます

            listBox1.DataBindings.Add("DataSource", textBox1, "Text", true, DataSourceUpdateMode.OnPropertyChanged).
            Format += (sender, e) =>
            {
                e.Value = _strings.FindAll(s => s.StartsWith((string) e.Value));
            };
于 2009-08-12T04:38:32.567 に答える
0

私たちの wpf アプリには、リスト ボックスをフィルター処理するテキスト ボックスがあり、previewkeyup イベントを使用します。コード内で、どのキーが押されたかを確認できます (コードを前に出さないでください。e.Key == Key.UpArrow のようなものです。どちらにしても、C# にはこのための組み込みクラスがあります)。それがホット キーの 1 つである場合は、それに応じてユーザー コントロールを操作します。

リストボックスの場合、それをユーザーコントロールに投げ込み、NavigateableListbox などと呼ばれるインターフェースを実装し、強制的に MoveUp()、MoveDown()、PageUp()、PageDown() などを実装するようにしました。 e.Key = Key.UpArrow { mylistbox.MoveUp() }

于 2009-08-12T04:47:30.350 に答える