获取控件上执行的事件

时间:2011-09-28 07:29:08

标签: c# winforms event-handling

我希望得到一些帮助。

在我的应用程序中,我有一个文本框,它应该在点击它时显示任何控件中发生的事件。

例如,如果我点击应用程序中的按钮或复选框,则文本框应标识该事件并显示为button1.clicked,checkbox1.checked类似的东西。

任何人都可以帮我完成这件事。

先谢谢。:)

1 个答案:

答案 0 :(得分:1)

如果你想动态地对所有控件进行操作,你可以浏览控件树并为下面显示的事件订阅相同的事件处理程序,如果预定义的控件设置基本上只是为相同的偶数处理程序订阅所有控件。

预定义控件设置

checkBox1.CheckedChanged += (s, e) => { /*  handles Checked state changes*/ };
button1.Click += (s, e) => { /*  handles button click */ };

<强>动态

private void InitializeHooks()
{
    foreach(var control in this.Controls)
    {
       var button = control as Button;
       if (button != null)
       {
          button.Click += OnClick;
          continue;
       }

       var checkBox = control as CheckBox;
       if (checkBox != null)
       {
          checkBox.CheckedChanged += OnCheckedChanged;
       }       
    }
}

// Button click handler
private void OnClick(object sender, EventArgs eventArgs)
{
   txtOutput.Text = String.Format(
                                CultureInfo.CurrentCulture,
                                "{Control Type: {0}, Name: {1}, Event: Click",
                                sender.GetType().Name,
                                sender.Id);
}

// Checkbox Checked state changed handler
private void OnCheckedChanged(object sender, EventArgs eventArgs)
{
     txtOutput.Text = String.Format(
                                CultureInfo.CurrentCulture,
                                "{Control Type: {0}, Name: {1}, Event: CheckedChanged",
                                sender.GetType().Name,
                                sender.Id);

}