我正在制作一个工具,我想出了如何为按钮做声音效果。有没有什么办法可以让一个命令适用于所有按钮,而不必在每个按钮编码之前输入我为音效制作的定义。我知道在每个按钮的编码之前放置命令会起作用,但有没有办法做到这一点?感谢
答案 0 :(得分:0)
假设您正在谈论WinForms或WebForms,您可以这样做:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Button b in Controls.OfType<Button>())
{
b.Click += MakeSoundEffect;
}
}
private void MakeSoundEffect(object sender, EventArgs e)
{
// Do something
}
这会占用您表单上的所有按钮,点击后会执行MakeSoundEffect
。您可以使用sender
对象来确定推送哪个按钮。
如果你的MakeSoundEffect()
方法足够简单,你可能想使用lambda创建一个闭包,如下所示:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Button b in Controls.OfType<Button>())
{
b.Click += (btnSender, btnEvent) =>
{
// Do Something
};
}
}
此外,如果您不想要所有按钮,但可能只是名称以btnSoundEffect
开头的按钮,则可以将foreach
循环更改为以下内容:
foreach (Button b in Controls.OfType<Button>().Where(z => z.Name.StartsWith("btnSoundEffect")))
可能更好的方法是,如果只需要特定的按钮,就可以在表单上创建一个组并将所有按钮放在该组中,然后只需将for
循环更改为:
foreach (Button b in grpButtons.Controls.OfType<Button>())
{
// Do Something
}