当我双击设计中的文本框时,它会自动为我创建一个方法。由于我希望在任何情况下都能发生相同的事情,我只需从每个方法中调用辅助方法,如下面的代码所示。
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) { ... }
现在我想知道是否有办法(除了进入我的设计文件(根据其中的信息,不应该尝试)将动作侦听器连接到相同的方法并跳过绕过自动生成的绕道。
答案 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)
请按照以下步骤操作:
你可以看到以下内容。
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();
}