我正在编写一个简单的加密程序。 当我输入第一个文本框时,加密文本会使用textchanged事件动态显示在第二个文本框中。 我还有一个加载密钥文件的按钮。 我的问题是,如果我首先输入文本框,然后加载一个密钥文件,之后不调用加密处理程序,因为它挂钩到textchanged事件,我必须写一些东西到第一个文本框来调用它。
为了解决这个问题,我将2个事件连接到加载按钮的click事件,一个是加载密钥文件,另一个是挂钩到textchanged事件的事件。 (我真的想避免代码重复。)
这是正常的,但我怎么能确定每次加密密钥文件并在加密函数被调用之前完成? 有更好的方法吗?
答案 0 :(得分:2)
您应该考虑创建单独的方法:
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;
}
加密甚至可以放在一个单独的类中,但这可以帮助你开始。
答案 1 :(得分:1)
看起来你正试图将你的事件链接起来。可以通过从KeyFilesLoadedEvent(或其他任何名称)调用TextChanged事件来完成它。
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);
}
};