从发件人处查找打开的表格

Find Open Form from Sender

我有 24 个按钮,每个按钮打开一个单独的表单。我想要一种方法来打开/在单击所有按钮时将每个按钮放在前面,这样我就不必为每个按钮单击都创建一个单独的方法,这样看起来像这样:

    private void OpenForm(object sender, EventArgs e)
    {
        Type type = sender.GetType();
        var existingInstance = Application.OpenForms.OfType<type>().Single();
        existingInstance.BringToFront();
    }

但随后我收到错误消息“'type' 是一个变量,但像类型一样使用。

我查看了 Stack Overflow 上的许多其他论坛,none 给了我一个解决方案。也许我想要完成的事情是不可能的?

在按钮和表单之间创建字典 link:

Dictionary<Button, Form> _buttonToFormDict = new Dictionary<Button, Form>();

在您的代码中向字典添加按钮和表单:

_buttonToFormDict.Add(button1, _form1);
_buttonToFormDict.Add(button2, _form2);
_buttonToFormDict.Add(button3, _form3);
...

添加一个按钮点击事件,检查点击了哪个按钮并找到相关表单:

private void button_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    if (sender is Button && _buttonToFormDict.ContainsKey(btn))
    {
        Form form = _buttonToFormDict[btn];
        if (!form.IsDisposed && form != null)
        {
            // Show the form if it was not shown
            form.Show();

            // Bring back the form if it was minimized
            if (form.WindowState == FormWindowState.Minimized)
            {
                form.WindowState = FormWindowState.Normal;
            }

            // Brig to front
            form.BringToFront();
        }
    }
}

并将点击事件添加到按钮的点击事件中。