如何将多个文本框中的文本更改事件连接到单个方法(C#)?

时间:2012-09-17 13:20:20

标签: c# winforms

当我双击设计中的文本框时,它会自动为我创建一个方法。由于我希望在任何情况下都能发生相同的事情,我只需从每个方法中调用辅助方法,如下面的代码所示。

private void TextBox_1_TextChanged(object sender, EventArgs e)
{
  TextChanged();
}

private void TextBox_2_TextChanged(object sender, EventArgs e)
{
  TextChanged();
}

private void TextChanged(object sender, EventArgs e) { ... }

现在我想知道是否有办法(除了进入我的设计文件(根据其中的信息,不应该尝试)将动作侦听器连接到相同的方法并跳过绕过自动生成的绕道。

6 个答案:

答案 0 :(得分:3)

在设计器页面上转到事件选项卡,找到您要查找的事件(TextChanged)并手动输入您希望它们都使用的事件处理程序的名称。

答案 1 :(得分:3)

我通常在我的项目中这样做,如果控件在运行时不会改变(即如果在设计时添加了表单中的所有控件):

// this is the container's ctor
public MyForm()
{
    TextBox1.TextChanged += new EventHandler(UniqueHandler);
    TextBox2.TextChanged += new EventHandler(UniqueHandler);
    ...
    TextBoxN.TextChange += new EventHandler(UniqueHandler);
}

void UniqueHandler(object sender, EventArgs e)
{
    TextBox source = (sender as TextBox);
    // handle the event!
}

如果控件更改,它实际上非常相似,它不会发生在ctor中,而是在现场:

// anywhere in the code
TextBox addedAtRuntime = new TextBox();
addedAtRuntime.TextChanged += new EventHandler(UniqueHandler);
MyForm.Controls.Add(addedAtRuntime);
// code goes on, the new textbox will share the handler

答案 2 :(得分:1)

在属性折叠中(通常在屏幕右侧),您应该有一个雷电图标。这就是所有事件都可以参考的地方。

如果没有看到属性,请选择被视为的组件(在您的案例中为文本框),右键单击它并在上下文菜单中选择“属性”。

答案 3 :(得分:0)

你可以这样做:

 void btn1_onchange(object sender, EventArgs e)
  {
    MessageBox.Show("Number One");
  }

  void btn1_onchange2(object sender, EventArgs e){
    MessageBox.Show("Number Two");
  }

  public MyForm() {


    Button btn1 = new Button();
    btn1.Text = "Click Me";
    this.Controls.Add(btn1);

    btn1.TextChange += new EventHandler(btn1_onchange);
    btn1.TextChange += new EventHandler(btn1_onchange2);
  }

答案 4 :(得分:0)

您可以在设计师视图中执行此操作。而不是双击元素 - 转到按钮的属性,选择事件选项卡,然后为适当的事件添加适当的处理程序名称。瞧!

答案 5 :(得分:-1)

请按照以下步骤操作:

  1. 转到InitializeComponent()。
  2. 每个文本框都附有三个事件。
  3. 你可以看到以下内容。

    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    this.textBox2.TextChanged += new System.EventHandler(this.textBox2_TextChanged);
    

    将其替换为

    this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    this.textBox2.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
    

    然后删除下面的方法

    private void TextBox_2_TextChanged(object sender, EventArgs e)
    {
      TextChanged();
    }