Groupbox检查更改事件

时间:2012-08-02 13:50:33

标签: c# events groupbox

我有一个DataGridView和一个GroupBox控件,其中包含一些ComboBoxes 根据{{​​1}}中选择的内容,网格中的元素会发生变化。

有没有办法说出来

ComboBoxes

(不为每个方框写一个If (Something Changes Within The GroupBox) { //Update the grid } 事件)
我不想要更新部分的代码,我只需要一个事件或者我可以使用的东西来检查控件的值是否在OnSelectedIndexChange内发生了变化。
有什么想法吗?


更新

好的,我想我没有以正确的方式解释它 忘掉GroupBox
假设我在ComboBox中有一堆控件可以说:

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

3 个答案:

答案 0 :(得分: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来说不一定相同。这将是一个语义挑战,并不是很清楚。希望这是有道理的。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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中更改的控件的名称