我正在构造一个Form,它具有几个numericUpDown控件,几个复选框控件和一些文本框等.每个控件都有一个事件方法(CheckedChanged,ValueChanged等),该方法被触发以执行某项操作,但我的主要问题是:
我想做的是运行一个方法,该方法将更新表单上的文本字段,但是目前我只重复了24次.这可行,但是我觉得必须有更好的方法.下面是到目前为止的示例.
private void button3_Click(object sender, EventArgs e)
{
// Code Specific to the Buton3_Click
UpdateTextLabel();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
// Code Specific to the checkBox1_CheckChanged
UpdateTextLabel();
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
// numericUpDown1 specific code ....
UpdateTextLabel();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// comboBox1 specific stuff ...
UpdateTextLabel();
}
// .... and so on for every method ....
有没有更好的方法来实现这一目标?我想说“如果单击或更改了任何控件,请执行此“ UpdateTextLabel()”事情“,但不确定如何进行.很高兴能直接回答这个问题,因为我在搜索中输入的问题似乎不是“正确的问题” …
谢谢!
解决方法:
是的,您不想编写这样的代码.您不必一定要使用Application.Idle事件来更新UI状态.它在Winforms从消息队列中检索所有未决消息后每次运行.因此可以保证在您当前订阅的任何事件之后运行.使它看起来像这样:
public Form1() {
InitializeComponent();
Application.Idle += UpdateTextLabel;
this.FormClosed += delegate { Application.Idle -= UpdateTextLabel; };
}
void UpdateTextLabel(object sender, EventArgs e) {
// etc..
}