【问题标题】:C# Call an event (linkLabel2_LinkClicked) from another methodC# 从另一个方法调用事件 (linkLabel2_LinkClicked)
【发布时间】:2016-04-29 22:42:23
【问题描述】:

我的表单上有一个用于 LinkLabel linkLabel2_LinkClicked 的事件处理程序:

private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    //code here
}

我需要从另一个没有对象发送者和任何 eventargs 的方法调用它:

private void UpdateMethod()
{
    linkLabel2_LinkClicked(this, ?????)
}

如果它是一个按钮,我会调用 PerformClick 方法。但是我找不到这样的 LinkLabel。

linkLabel2_LinkClicked 事件处理程序中执行代码的最佳做法是什么?

更新:我想我并不清楚这一点。当我看到这种方法时,我想知道最佳实践。我从答案中可以看出,这不是正确的方法,而是将代码移动到一个单独的方法并直接从另一个方法调用它。如果有任何其他理由,请告诉我。

更新2:我现在重写代码如下:

private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    CreatePreview();
}

private void UpdateMethod()
{
    CreatePreview();
}

private void CreatePreview()
{
    //code comes here
}

效果很好。

【问题讨论】:

  • 为什么投反对票?我已经看到这样做了,例如在这里:stackoverflow.com/questions/11518529/… 我从答案中得知这是一种不好的做法,但这就是我首先问的原因......

标签: c# winforms eventhandler linklabel


【解决方案1】:

您可以在事件参数中输入 null :

linkLabel2_LinkClicked(this, null);

或者创建一个新的事件对象:

linkLabel2_LinkClicked(this, new LinkLabelLinkClickedEventArgs());

但最好的方法是创建一个单独的方法并在每次需要时调用它。

【讨论】:

    【解决方案2】:

    您可以只传递null,因为您没有使用该参数,但我建议您不要这样做。不鼓励直接调用事件,这会导致代码难以阅读。

    只需让另一个方法调用CreatePreview()

    private void UpdateMethod()
    {
        CreatePreview();
    }
    

    【讨论】:

    • “不鼓励”,我完全同意。直接调用 EventHandler 方法是不好的做法。此外,您应该只使用 EventHandler 方法来调用业务逻辑中的函数
    • 我更改了代码,您的回答帮助我调试了我遇到的问题。
    猜你喜欢
    • 2013-05-17
    • 2020-10-20
    • 2014-01-31
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多