从 C# 中的另一个 private void 调用 private void

call private void from another private void in C#

如果 axTws1_tickPrice 中的某些条件成立,我想打电话给 btnSubmit。我该怎么做?

private void btnSubmit_Click(object sender, EventArgs e)
{
  //code here
}

private void axTws1_tickPrice(object sender, AxTWSLib._DTwsEvents_tickPriceEvent e)
{    
    if (Condition)
    {
        Call butSubmit (how do i do this)
    }
}

您最好拥有一个您的两个控制处理程序都调用的通用方法,而不是试图从一个处理程序调用另一个处理程序。这样您的代码就更具可扩展性和可测试性,并且您不必担心事件参数或发送者。

例如:

private void btnSubmit_Click(object sender, EventArgs e)
{
    DoStuff();
}

private void axTws1_tickPrice(object sender, AxTWSLib._DTwsEvents_tickPriceEvent e)
{    
    if (Condition)
    {
        DoStuff();
    }
}

private void DoStuff()
{
    // code to do stuff common to both handlers
}

只需使用当前参数调用即可。

if (Condition)
{
    butSubmit(sender, null)
}

难以置信,但是

btnSubmit_Click(null,null); 

或其他参数(如果需要)。

private void axTws1_tickPrice(object sender, AxTWSLib._DTwsEvents_tickPriceEvent e)
{    
    if (Condition)
    {
        button1_Click(sender, EventArgs.Empty);
    }
}

button1_Click 类似于接受两个类型 objectEventArgs 输入的普通方法,因此您可以通过提供相同的参数来调用它们。如果您不打算在方法内部使用这些参数,那么您可以通过传递 null,null 来调用它们 如果您想在内部使用 esender,则不要使用 null方法。在这种情况下,就像我上面建议的那样打电话给他们。

多个选项。

选项 1:

首选方法,将通用逻辑移至另一种方法。

private void btnSubmit_Click(object sender, EventArgs e)
{
    CommonLogic();
}

private void axTws1_tickPrice(object sender, AxTWSLib._DTwsEvents_tickPriceEvent e)
{    
    if (Condition)
    {
        CommonLogic();
    }
}

private void CommonLogic()
{
    // code for common logic
}

选项 2:

正在执行为按钮生成 Click 事件的 PerformClick() 方法。

btnSubmit.PerformClick();

选项 3:

像调用任何其他普通方法一样调用事件方法。

btnSubmit_Click(sender, new EventArgs());

感谢 Steve 和 Hari - 这很有效

private void btnSubmit_Click(object sender, EventArgs e)
{
    DoStuff();
}

private void axTws1_tickPrice(object sender, AxTWSLib._DTwsEvents_tickPriceEvent e)
{    
    if (Condition)
    {
        DoStuff();
    }
}

private void DoStuff()
{
    // code to do stuff common to both handlers
}