1

UIにいくつかのコンボボックスがあり、それぞれに類似したエントリ(番号)の長いリストがあります。ユーザーがコンボボックスの1つからアイテムを選択すると、ユーザーが他のコンボボックスから同様の値(ただし同じではない可能性が高い)のエントリを選択することを私は知っています。したがって、ユーザーが値を選択した後、ユーザーに多くのスクロールを強制しないようにするために、次のコンボボックスのドロップダウンを最後に選択した値の近くに「事前スクロール」したいと思います(このドロップダウンがない場合)すでに選択があります)。

私はこれまでに使用してこれを達成しました

combobox.SelectedItem = myLastSelectedItem;

combobox.DropDownイベントハンドラー内。

次に、ドロップダウンが閉じたときに、ユーザーがドロップダウンからアイテムをクリックしたかどうかを検出できるようにする必要があります。ユーザーがアイテムをクリックしなかった場合は、選択した値を以前の値にリセットする必要があります(何もありません)。ユーザーがmyLastSelectedItemまたは別のアイテムをクリックした可能性があります(したがって、ユーザーがクリックした場合でも同じである可能性があるため、現在選択されているアイテムをmyLastSelectedItemと比較することはできません)。SelectedValueChange、SelectedIndexChange、TextChangedはすべて、DropDownClosedイベントの後に発生するため、使用できません。MouseClickイベントはまったく発生しません。

したがって、ユーザーがコンボボックスドロップダウン内のアイテムをクリックしたことを検出するにはどうすればよいですか(ユーザーがアイテムの外側をクリックしたか、エスケープを押したためにドロップダウンが閉じたのではありません)。

4

1 に答える 1

0

私はこれが機能するかどうかを確認するために最善を尽くしましたが、30分後に髪を引っ張っていなかったら気が済まないでしょう. 多少の変更を受け入れる場合は、ListBox コントロールを使用してみてください。必要なインデックスまでスクロールする「TopIndex」プロパティがありますが、実際には選択されません。以下のコードを参照してください。

    private void listBox_SelectedIndexChanged(object sender, EventArgs e) {
        ListBox lbx = sender as ListBox;
        if (lbx != null) {
            switch (lbx.Name) {
                case "listBox1": 
                    listBox2.TopIndex = lbx.SelectedIndex; 
                    listBox2.SelectedIndex = -1; 
                    listBox3.TopIndex = 0; 
                    listBox4.TopIndex = 0; 
                    break;
                case "listBox2": 
                    listBox3.TopIndex = lbx.SelectedIndex; 
                    listBox3.SelectedIndex = -1;
                    listBox4.TopIndex = 0;
                    break;
                case "listBox3": 
                    listBox4.TopIndex = lbx.SelectedIndex; 
                    listBox4.SelectedIndex = -1; 
                    break;
            }
        }
    }

SelectedIndexChanged イベントでそれを使用する 4 つの異なる ListBox コントロールを使用します。それがうまくいくかどうか教えてください。そうでない場合は、ComboBoxes に戻ることができます。

于 2012-09-28T18:39:54.423 に答える