有什么办法,我可以使一个命令适用于所有按钮

本文关键字:一个 命令 适用于 按钮 什么 可以使 我可以 | 更新日期: 2023-09-27 18:18:57

我正在制作一个工具,我想出了如何为按钮做一个声音效果。是否有任何方法,我可以使一个命令适用于所有按钮,而不是把我为每个按钮编码之前的声音效果的定义。我知道把命令之前的编码每个按钮将工作,但有办法做到这一点吗?由于

有什么办法,我可以使一个命令适用于所有按钮

假设你正在谈论的是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
}