0

我在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();
}
4

2 回答 2

0

我的错误,正如上面评论中所建议的那样,我没有在我的 switch 和 case 语句中调用我的 createClaroRead 函数。这么愚蠢的事情可以忽略。

谢谢大家的回复。

于 2013-01-28T09:12:19.883 回答
0

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();
}
于 2013-01-27T18:47:51.443 回答