2

と、いくつかをDataGridView含むGroupBoxコントロールがありComboBoxesます。
で選択した内容に応じてComboBoxes、グリッド内の要素が変化します。

言い方はありますか

If (Something Changes Within The GroupBox)
{
   //Update the grid
}

(OnSelectedIndexChangeボックスごとにイベントを作成
せずに) 更新部分のコードは必要ありません。コントロールの値が 内で変更されたかどうかを確認するために使用できるイベントまたは何かが必要なだけですGroupBox
何か案が ?


アップデート

わかりました、私はそれを正しい方法で説明しなかったと思います。
を忘れてくださいComboBox
私がたくさんのコントロールを持っているとしましょうGroupBox

いずれかのコントロールの値が変更されるとすぐに、イベントを作成します。

4

3 に答える 3

9

各コンボボックスSelectedIndexChangedイベントを1つのメソッドに接続できます。

comboBox1.SelectedIndexChanged += new System.EventHandler(GroupBoxComboBoxChange);
comboBox2.SelectedIndexChanged += new System.EventHandler(GroupBoxComboBoxChange);
comboBox3.SelectedIndexChanged += new System.EventHandler(GroupBoxComboBoxChange);
comboBox4.SelectedIndexChanged += new System.EventHandler(GroupBoxComboBoxChange);

または、LINQを使用して、コンボボックスの選択を変更するためのイベントハンドラーを設定します。

GroupBox.Controls.OfType<ComboBox>.ForEach(cb => cb.SelectedIndexChanged += new System.EventHandler(GroupBoxComboBoxChange));

更新への回答: ControlValueChanged()イベントを探しています。ここでの問題は、すべてのコントロールが異なることだと思います。ComboBoxの「ValueChanged」イベントを定義するものは、TextBoxの場合と必ずしも同じではありません。それは意味論的な挑戦であり、あまり明確ではありません。これが理にかなっていることを願っています。

于 2012-08-02T13:55:53.510 に答える
3

GroupBox には「自分の中の何かが変わった」ということはありませんが、「ごまかす」ことができ、このように DYI できます (これは、エラー チェックと並べ替えを行わない単なる概念実証です)。

// In a new Windows Forms Application, drop a GroupBox with a ComboBox and a CheckBox inside
// Then drop a TextBox outside the ComboBox. Then copy-paste.

// this goes somewhere in your project
public static class handlerClass
{
    public static string ControlChanged(Control whatChanged)
    {
        return whatChanged.Name;
    }
}

// And then you go like this in the Load event of the GroupBox container
void Form1_Load(object sender, EventArgs args)
{
    foreach (Control c in groupBox1.Controls)
    {
        if (c is ComboBox) 
            (c as ComboBox).SelectedValueChanged += (s, e) => { textBox1.Text = handlerClass.Handle(c); }; 
        if (c is CheckBox) 
            (c as CheckBox).CheckedChanged += (s, e) => { textBox1.Text = handlerClass.Handle(c); }; }
    }
}

人それぞれControl「変わった!」があるから。イベントのようなもので、ボイラープレートに関する限り、これ以上短くすることはできないと思います. Behavior は、ComboBox で変更されたコントロールの名前を記述する単なるサンプルです

于 2012-08-02T14:24:40.157 に答える
2

GroupBox は通常、ラジオ ボタンやチェック ボックスを管理する場合を除いて単なる装飾的なものです。もしよろしければ、やりたいことを実行するメソッドをコーディングして、すべてのコンボ ボックスの SelectedIndexChanged イベントからそのメソッドを呼び出してみませんか?

于 2012-08-02T14:04:52.070 に答える