2

我有一个DataGridView和一个GroupBox包含几个ComboBoxes.
根据在 中选择ComboBoxes的内容,网格中的元素会发生变化。

有没有办法说

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

OnSelectedIndexChange(不为每个框编写事件)
我不想要更新部分的代码,我只需要一个事件或可以用来检查控件的值是否在GroupBox.
任何的想法 ?


更新

好的,我想我没有以正确的方式解释它。
忘记ComboBox.
假设我有一堆控件GroupBox有没有办法说:

只要其中一个控件的值发生变化,就创建一个事件。

4

3 回答 3

9

您可以将每个组合框 SelectedIndexChanged 事件连接到一种方法:

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

GroupBoxes 没有“我内心的东西改变了”,但你可以像这样“作弊”和 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人都有自己的“我变了!” 一种事件,我认为就样板文件而言它不能更短。行为只是一个示例,它在 ComboBox 中写入更改的控件的名称

于 2012-08-02T14:24:40.157 回答
2

GroupBoxes 通常只是装饰性的,除非它们管理单选按钮或复选框,因此期望它们了解对组合框所做的更改并不是开箱即用的事情。如果可以的话,为什么不编写一个方法来执行您希望它执行的操作,然后从所有组合框的 SelectedIndexChanged 事件中调用该方法?

于 2012-08-02T14:04:52.070 回答