C# 共享一个事件处理程序的多个按钮不起作用

C# 共享一个事件处理程序的多个按钮不起作用,c#,events,event-handling,C#,Events,Event Handling,让我的EventHandler处理多个按钮时遇到一些困难。他们将完成相同的工作,即链接到相同的表单(ModuleTemplate),并使用与该模块相关的适当内容填充表单 我只粘贴了有问题的代码。它编译得很好,第一个按钮(btnAudioNotetaker)工作正常,其他按钮什么也不做 public void createAudioNotetaker() { //this button click event works btnAudioNotetaker.Click += new

让我的
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();
}

我的错误,正如上面的评论所指出的,我没有在switch和case语句中调用createClaroRead函数。忽视这件事真是愚蠢


谢谢大家的回复。

您是否在代码中调用createClaroRead?它被执行了吗?为什么你的方法btnModule\u Click有这么多参数?最好将它们中的大多数组合到单个类中。参数用于处理不同的内容、路径、文件、编号等。ModuleTemplate表单中有相当多的元素。部分原因是我缺乏知识!至于调用createClaroRead,我已经像这样包装了每个模块的配置,因为在某些情况下,用户将无法使用这些模块。愚蠢的问题是,您是否在
createClaroRead()
中设置了一个断点以确保调用该方法?如果没有调用该函数,则问题不在此处显示的代码范围内。使用完全相同的参数调用btnModule_Click(),因此无法区分两者之间的区别。