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

C# 我想在另一个事件中调用visual c事件。我该怎么做?,c#,C#,我想在btnExit\u单击中调用btnDisconnect\u单击 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

我想在
btnExit\u单击中调用
btnDisconnect\u单击

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?
}

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

您可以使用
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);
} 

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

您可以使用
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);
} 

它们只是方法。就叫它吧。您需要提供btnDisconnect\u Click所期望的任何事件参数(可能没有)。所以最简单的是:

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

这将以发送方身份传递当前表单/窗口/无论它是什么,以及一个没有数据的EventArgs对象。

它们只是方法。就叫它吧。您需要提供btnDisconnect\u Click所期望的任何事件参数(可能没有)。所以最简单的是:

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

这将传递当前表单/窗口/无论它是什么作为发送方,以及一个不带数据的EventArgs对象。

您可以按列出的方式调用它。下面的
不是必需的,但它为代码添加了上下文:

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());
}

你可以按你所列的那样称呼它。下面的
不是必需的,但它为代码添加了上下文:

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());
}

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

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

private void DoDisconnect()
{
   ...
}
然后我可以从任何地方调用相同的函数:

private void btnExit_Click(object sender, EventArgs e)
{
   DoDisconnect();
}
通过这种方式,您的“断开连接”逻辑会因为采用了实际上不会以任何方式影响断开连接行为的伪参数而变得混乱


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

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

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

private void DoDisconnect()
{
   ...
}
然后我可以从任何地方调用相同的函数:

private void btnExit_Click(object sender, EventArgs e)
{
   DoDisconnect();
}
通过这种方式,您的“断开连接”逻辑会因为采用了实际上不会以任何方式影响断开连接行为的伪参数而变得混乱


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

我将在这里做一个假设,并说您试图做的是为断开和退出按钮调用断开连接(可能是网络资源)。您可能希望将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();
}

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

我将在这里做一个假设,您试图做的是为断开和退出按钮调用断开连接(可能是网络资源)。您可能希望将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();
}

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

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

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);
}

在最简单的情况下,您只需调用btnDiconnect\u,直接单击即可,如下所示:

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);
}

您可以调用传递有效参数的方法

btnDisconnect_Click(btnDisconnect,new EventArgs());

但是,您可能需要考虑将代码中的代码在<代码> BTNStCuths<代码>中重构为一种新的方法,并调用它:

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

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

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

您可以调用传递有效参数的方法

btnDisconnect_Click(btnDisconnect,new EventArgs());

但是,您可能需要考虑将代码中的代码在<代码> BTNStCuths<代码>中重构为一种新的方法,并调用它:

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

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

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

@jgauffin-那也行。我输入了
new
,假设使用该行OP将做一些特殊的事情。我的偏好(如果这么简单的话)是传递null。如果不是这么简单的话,我的首选是按照其他答案中列出的重构思路使用一些东西。@jgauffin-那也行。我输入了
new
,假设使用该行OP将做一些特殊的事情。我的偏好(如果这么简单的话)是传递null。如果不是这么简单,我的首选是按照其他答案中列出的重构使用一些东西。