我想在另一个事件中调用visual c#事件。我怎么做?

时间:2010-11-23 04:53:44

标签: c#

我想在btnDisconnect_Click内致电btnExit_Click

private void btnDisconnect_Click(object sender, EventArgs e)
{
   //does something
}

private void btnExit_Click(object sender, EventArgs e)
{
   //I want to call btnDisconnect_Click. What line of code should I use here?
}

8 个答案:

答案 0 :(得分:3)

通常在这样的情况下,我使我的点击处理程序只调用另一个函数并传入适当的参数:

private void btnDisconnect_Click(object sender, EventArgs e)
{
   DoDisconnect();
}

private void DoDisconnect()
{
   ...
}

然后我可以从任何地方调用相同的函数:

private void btnExit_Click(object sender, EventArgs e)
{
   DoDisconnect();
}

这样,你的“断开连接”逻辑就会被虚拟参数搞砸,这些参数实际上不会以任何方式影响断开行为。

这也意味着您可以从表单中开始分解视图逻辑。

答案 1 :(得分:1)

这取决于您是否使用传递给事件处理程序的参数

您可以使用nulls

来调用它

这样的东西
private void btnDisconnect_Click(object sender, EventArgs e) 
{ 
   //does something 
} 

private void btnExit_Click(object sender, EventArgs e) 
{ 
   //I want to call btnDisconnect_Click. What line of code should I use here? 
   btnDisconnect_Click(null,null);
} 

答案 2 :(得分:0)

他们只是方法。打电话吧。您需要提供btnDisconnect_Click所期望的任何事件参数(可能没什么)。所以最简单的事情是:

private void btnExit_Click(object sender, EventArgs e)
{
    btnDisconnect_Click(this, EventArgs.Empty);
}

这将传递当前表单/窗口/它作为发送者的任何内容,以及没有数据的EventArgs对象。

答案 3 :(得分:0)

您可以像列出它一样调用它。下面的this不是必需的,但它会在代码中加上上下文:

private void btnExit_Click(object sender, EventArgs e)
{
   //I want to call btnDisconnect_Click. What line of code should I use here?
   this.btnDisconnect_Click(null, null);

   // If you need to have sender as something you can always put
   // this in directly
   this.btnDisconnect_Click(this.btnDisconnect, new System.EventArgs());
}

答案 4 :(得分:0)

我将在这里做一个假设并说你要做的是为断开连接和退出按钮调用Disconnect(可能是网络资源)。您可能希望将disconnect事件处理程序的代码重构为单独的方法,而不是从另一个调用一个事件处理程序方法。然后从两个处理程序中调用该方法。例如:

private void Disconnect()
{
    //Disconnect here
}

private void btnDisconnect_Click(object sender, EventArgs e)
{
    //do some other stuff here
    Disconnect();
}

private void btnExit_Click(object sender, EventArgs e)
{
    //do some other exit stuff here
    Disconnect();
}

这使您的代码更加清晰,使您不必从另一个调用一个事件处理程序。这开始将您的视图逻辑与程序逻辑的其余部分分开,从长远来看,这更加可取并且更容易维护。例如,您可能需要一个单独的控制器来处理网络资源,而不是将其嵌入到视图的逻辑中。

答案 5 :(得分:0)

在最简单的情况下,您可以直接调用btnDiconnect_Click,如下所示:

private void btnDisconnct_Click(Object sender, EventArgs e)
{
    //Does Something
}

private void btnExit_Click(Object sender, EventArgs e)
{
    //Call btnDisconnect_Click()
    btnDisconnect_Click(sender, e);
}

答案 6 :(得分:0)

你可以调用传入有效参数的方法。

btnDisconnect_Click(btnDisconnect,new EventArgs());

但是,您可能需要考虑将btnDisconnect中的代码重构为新方法并调用它:

private void doSomething()
{
   //....
}

private void btnDisconnect_Click(object sender, EventArgs e) 
{ 
   doSomething();
} 

private void btnExit_Click(object sender, EventArgs e)
{
   doSomething();
}

答案 7 :(得分:0)

{// this is probably your constructor
.
    public delegate void MyCustomHandler(object sender, EventArgs e);
.
    MyCustomHandler myCustomHandler = new MyCustomHandler(); //you can do more in your delegates constructor, members etc

    myCustomHandler += btnExit_Click;
    myCustomHandler += btnDisconnect_Click;
}

private void btnDisconnect_Click(object sender, EventArgs e) 
{ 
   // do Something
} 

private void btnExit_Click(object sender, EventArgs e)
{
   // do Something
}





//And wherever you need to invoke these, you do
myCustomHandler(object sender, EventArgs e);