在另一个事件处理程序中调用事件处理程

时间:2011-08-25 07:27:05

标签: c# .net event-handling

以下是简短的示例代码:

private void txtbox1_DoubleClick(object sender, EventArgs e)
{
    button1_Click(object sender, EventArgs e); //can I call button1 event handler?
}

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(txtbox1.Text);
}

我想知道以上述方式编码是否可行?

3 个答案:

答案 0 :(得分:7)

您可以这样做 - 尽管您提供的代码无法编译。它应该是这样的:

private void txtbox1_DoubleClick(object sender, EventArgs e)
{
    button1_Click(sender, e);
}

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(txtbox1.Text);
}

但是为了获得最佳实践和代码可读性,您最好不要这样做,尤其是在您没有使用sendere时:

private void txtbox1_DoubleClick(object sender, EventArgs e)
{
    ShowMessageBox();
}

private void button1_Click(object sender, EventArgs e)
{
    ShowMessageBox();
}

private void ShowMessageBox()
{
    MessageBox.Show(txtbox1.Text);
}

答案 1 :(得分:4)

是的,你可以做到;事件处理程序只是另一种方法。

但是,创建一个显示消息框的新方法并让两个Click事件处理程序调用它可能是值得的:

private void txtbox1_DoubleClick(object sender, EventArgs e)
{
    ShowTextboxMessage();
}

private void button1_Click(object sender, EventArgs e)
{
    ShowTextboxMessage();
}

private void ShowTextboxMessage()
{
    MessageBox.Show(txtbox1.Text);
}

答案 2 :(得分:2)

事件处理程序只不过是一种方法,所以你可以像任何其他方法一样调用它。