【问题标题】:Best way to connect multiple event handlers to one event in C#?将多个事件处理程序连接到 C# 中的一个事件的最佳方法?
【发布时间】:2014-11-30 10:14:57
【问题描述】:

我正在编写一个简单的加密程序。 当我在第一个文本框中键入时,加密文本会使用 textchanged 事件即时显示在第二个文本框中。 我还有一个按钮来加载关键文件。 我的问题是,如果我先在文本框中输入内容,然后加载密钥文件,则不会调用加密处理程序,因为它与 textchanged 事件挂钩,我必须在第一个文本框中写入内容才能调用它。

为了解决这个问题,我在加载按钮的点击事件上绑定了 2 个事件,一个是加载密钥文件,另一个是与 textchanged 事件相同的。 (我真的很想避免代码重复。)

这工作正常,但我如何确定每次密钥文件加载发生并在调用加密函数之前完成? 有没有更好的方法来做到这一点?

【问题讨论】:

  • 请添加您的代码
  • 创建单独的方法并从事件处理程序中调用这些方法。
  • @Silvermind Imo 这是唯一正确的解决方案,也许您可​​以将其发布为答案

标签: c# .net events handlers


【解决方案1】:

您应该考虑创建单独的方法:

private List<string> keyCodes;

private void LoadKeyCodesButton_Click(object sender, RoutedEventArgs e)
{
    LoadKeyCodes();
    UpdateOutput();
}

private void InputTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    UpdateOutput();
}

private void LoadKeyCodes()
{
    // load key codes here
    keyCodes = new List<string>();
    // etc.
}

private void UpdateOutput()
{
    OutputTextBox.Text = EncryptText(InputTextBox.Text);
}

private string EncryptText(string input)
{
    // use keyCodes to encrypt
    return input;
}

加密甚至可以放在一个单独的类中,但这会帮助您入门。

【讨论】:

  • 哇,这真的很简单,看完后很遗憾不得不问! :)
【解决方案2】:

您似乎正在尝试链接您的事件。可以通过从 KeyFilesLoadedEvent 调用 TextChangedEvent 来完成(或其他任何调用)

public event TextChangedEventHandler TextChangedEvent;
public event KeyFilesLoadedEventHandler KeyFilesLoadedEvent;

KeyFilesLoadedEvent += (sender, e) =>
{
    /* the rest of your code for the KeyLoadedEvent  */
    TextChangedEventHandler handler = TextChangedEvent;
    if(handler != null)
    {
        handler(this, e);
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多