0

私はComboBoxいくつかのアイテムを持っています。イベントにイベントハンドラーを追加しましたSelectedIndexChanged。リストにAとBの2つのアイテムがあるとします。現在選択されているアイテムがAで、ユーザーがそれをBに変更した場合、イベントが発生し、それで問題ありません。ただし、ユーザーがをクリックしてComboBoxもう一度Aをクリックした場合(つまり、アイテムが実際に変更されていない場合)、イベントは引き続き発生します。アイテムが確実に変更された場合、またはこれを達成できる何かがあった場合にのみ、イベントが発生するようにしたいと思います。

4

7 に答える 7

5

ComboBox変更選択を図式的に計画していない場合は、 を使用してみてくださいSelectionChangeComitted

于 2012-11-27T10:35:55.170 に答える
3

このロジックをComboBox(私の例ではComboBoxEx)から派生したクラスにカプセル化することをお勧めします

private class ComboBoxEx : System.Windows.Forms.ComboBox
    {
        Int32 _lastIndex = -1;
        protected override void OnSelectedIndexChanged(System.EventArgs e)
        {
            if (_lastIndex == -1)
            {
                _lastIndex = this.SelectedIndex;
                base.OnSelectedIndexChanged(e);
            }
            else
                if (_lastIndex != this.SelectedIndex)
                {
                    base.OnSelectedIndexChanged(e);
                    _lastIndex = this.SelectedIndex;
                }
        }
    }

そして、次のように使用します。

public Form1()
    {
        var combobox = new ComboBoxEx() { DropDownStyle = ComboBoxStyle.DropDownList };
        combobox.Items.Add("Item 1");
        combobox.Items.Add("Item 2");
        combobox.Items.Add("Item 3");
        this.Controls.Add(combobox);
        combobox.SelectedIndexChanged += OnIndexChanged;

        InitializeComponent();
    }

    private void OnIndexChanged(object sender, EventArgs e)
    {
        MessageBox.Show("Index changed");
    }
于 2012-11-27T10:44:40.817 に答える
2

これがあなたの言いたいことだと思います:

int intIndex; //Global Variable
//In your ComboBox_SelectedIndex Changed event
if(myComboBox.SelectedIndex != intIndex) 
{
   //your code
   intIndex = myComboBox.SelectedIndex;
}
于 2012-11-27T10:32:55.403 に答える
2

SelectedIndexChanged の代わりに TextChanged イベントにイベント ハンドラーを追加するだけで問題が解決しました。これは、ComboBox (ドロップダウン リスト) 内の 2 つの項目が同じテキストを持たないことを確認できるため、私の場合はうまくいきます。

于 2012-11-27T10:36:33.273 に答える
1

1 つの解決策は、コンボボックスをモデル クラスのプロパティにデータバインドすることです。次に、モデルはインターフェイス INotifyPropertyChanged を実装する必要があります (値が変更された場合にのみ、正しく起動します)。次に、PropertyChanged イベントを使用して、コントロールの選択の変更を処理できます。このイベントは、実際の変更が発生した場合にのみ発生します。

于 2012-11-27T10:33:28.180 に答える
1

ComboBox の SelectedIndex を使用して int 変数を定義すると、変数がインデックスと同じ値を持っているかどうかを確認できます。はいの場合は何もしないでください。

int lastIndex = myComboBox.SelectedIndex;

次に、SelectedIndexChangedEvent で:

if(lastIndex != myComboBox.SelectedIndex){
     //do something
}
于 2012-11-27T10:35:34.637 に答える
0

InitializeComponent()で、これをコンボボックスに入れます

private void InitializeComponent()
{
   ///combobox
   ///This line will triger if the combobox has changed
   this.combobox.SelectedIndexChanged += System.EventHandler(this.comboboxChanged);
}

次に、メインメソッドで次のようなコンボボックスメソッドを作成します

private string previousValue;

Private void comboboxChanged(object sender, EventArgs e)
{
    if (combobox.Text == "A" && previousValue == "A")
        {
            //Do nothing
            previousValue = "A";
        }
    else if (combobox.Text == "B" && previousValue == "B")
        {
            //Do Nothing
            previousValue = "B";
        }
    else if (combobox.Text == "A")
        {
            //Do Something
            previousValue = "A";
        }
    else if (combobox.Text == "B")
        {
            //Do Something
            previousValue = "B";
        }
}
于 2016-08-15T17:11:40.907 に答える