共享一个事件处理程序的多个按钮不起作用
本文关键字:按钮 不起作用 程序 一个 共享 事件处理 | 更新日期: 2023-09-27 17:56:08
我在让我的EventHandler
为多个按钮工作时遇到了一些困难。他们将做同样的工作,即链接到相同的表单(ModuleTemplate
),并用与该模块相关的适当内容填充它。
我只粘贴了有问题的代码。这一切都编译得很好,第一个按钮(btnAudioNotetaker)工作正常,其他按钮什么都不做。
public void createAudioNotetaker()
{
//this button click event works
btnAudioNotetaker.Click += new EventHandler((sender, e) => btnModule_Click(sender, e, audioNotetakerDict, videoPathDict, pdfPathDict, audioPathDict));
}
public void createClaroRead()
{
//this one doesn't work
btnClaroRead.Click += new EventHandler((sender, e) => btnModule_Click(sender, e, audioNotetakerDict, videoPathDict, pdfPathDict, audioPathDict));
}
void btnModule_Click(object sender, EventArgs e, OrderedDictionary pageContent, OrderedDictionary videoPathDict, OrderedDictionary pdfPathDict, OrderedDictionary audioPathDict)
{
//i want to use this event for each button
ModuleTemplate newForm = new ModuleTemplate(pageContent, videoPathDict, pdfPathDict, audioPathDict);
newForm.Show();
this.Hide();
}
Lambda很酷,但我认为这段代码更清晰。 它可能会也可能不会解决您的问题(尝试此代码时可能会收到编译器错误),但维护起来要容易得多。
public void createAudioNotetaker()
{
//this button click event works
btnAudioNotetaker.Click += commonClickHandler;
}
public void createClaroRead()
{
//this one doesn't work
btnClaroRead.Click += commonClickHandler;
}
void commonClickHandler(object sender, EventArgs e)
{
btnModule_Click(sender, e, audioNotetakerDict, videoPathDict, pdfPathDict, audioPathDict));
}
void btnModule_Click(object sender, EventArgs e, OrderedDictionary pageContent, OrderedDictionary videoPathDict, OrderedDictionary pdfPathDict, OrderedDictionary audioPathDict)
{
//i want to use this event for each button
ModuleTemplate newForm = new ModuleTemplate(pageContent, videoPathDict, pdfPathDict, audioPathDict);
newForm.Show();
this.Hide();
}
我的错误,如上面的评论所建议的那样,我没有在我的开关和案例语句中调用我的 createClaroRead 函数。这么傻的事情被忽视了。
谢谢大家的回复。