【发布时间】:2016-05-30 20:55:18
【问题描述】:
我有这个代码:
private void loadGENIOFileToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog dlgFile = new OpenFileDialog();
dlgFile.InitialDirectory = Properties.Settings.Default.PreviousPath;
dlgFile.Title = "Select GENIO file";
dlgFile.Filter = "GENIO files (*.txt)|*.txt";
dlgFile.FilterIndex = 0;
dlgFile.Multiselect = false;
if (dlgFile.ShowDialog() == DialogResult.OK)
{
Properties.Settings.Default.PreviousPath = Path.GetDirectoryName(dlgFile.FileName);
DeleteView();
m_oThreadServices.OnLoadingCompleted += (_sender, _e) =>
{
mruMenu.AddFile(dlgFile.FileName);
m_sUITInfo.dbDatabase = m_oThreadServices.GetDatabase();
CreateView();
};
m_oThreadServices.SetGenioFilePath(dlgFile.FileName);
m_oThreadServices.start();
}
}
但我也在尝试实现 MRU 处理程序:
private void OnMruFile(int number, String filename)
{
if (File.Exists(filename))
{
Properties.Settings.Default.PreviousPath = Path.GetDirectoryName(filename);
DeleteView();
m_oThreadServices.OnLoadingCompleted += (_sender, _e) =>
{
mruMenu.SetFirstFile(number);
m_sUITInfo.dbDatabase = m_oThreadServices.GetDatabase();
CreateView();
};
m_oThreadServices.SetGenioFilePath(filename);
m_oThreadServices.start();
}
else
mruMenu.RemoveFile(number);
}
}
我的m_oThreadServices.OnLoadingCompleted 代码行似乎要求我使用+=,因此,如果我首先加载 一个文件,它会添加第一个事件处理程序。如果我然后去使用 MRU 列表来加载不同的文件,它最终会运行 两个 OnLoadingCompleted 处理程序。
我试过m_oThreadServices.OnLoadingCompleted =,但它不允许。那么我拦截事件处理程序而不是最终调用两组代码的正确方法是什么?我是不是搞错了?
谢谢。
【问题讨论】:
标签: c# winforms custom-events