Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从发件人处查找打开的表单_C#_Winforms_Controls - Fatal编程技术网

C# 从发件人处查找打开的表单

C# 从发件人处查找打开的表单,c#,winforms,controls,C#,Winforms,Controls,我有24个按钮,每个按钮打开一个单独的表单。我希望有一种方法可以在单击所有按钮时打开/并将每个按钮置于最前面,这样我就不必为每次按钮单击创建单独的方法,这样看起来就像这样: private void OpenForm(object sender, EventArgs e) { Type type = sender.GetType(); var existingInstance = Application.OpenForms.OfType<ty

我有24个按钮,每个按钮打开一个单独的表单。我希望有一种方法可以在单击所有按钮时打开/并将每个按钮置于最前面,这样我就不必为每次按钮单击创建单独的方法,这样看起来就像这样:

    private void OpenForm(object sender, EventArgs e)
    {
        Type type = sender.GetType();
        var existingInstance = Application.OpenForms.OfType<type>().Single();
        existingInstance.BringToFront();
    }
private void OpenForm(对象发送方,事件参数e)
{
Type=sender.GetType();
var existingInstance=Application.OpenForms.OfType().Single();
existingInstance.BringToFront();
}
但是我得到了一个错误“'type'是一个变量,但是它的用法和type一样


我看过许多其他关于堆栈溢出的论坛,但没有一个论坛给我提供了解决方案。也许我试图实现的是不可能的?

创建一个字典来链接按钮和表单:

Dictionary<Button, Form> _buttonToFormDict = new Dictionary<Button, Form>();
添加一个按钮单击事件,用于检查单击的按钮并查找相关表单:

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

然后将单击事件添加到按钮的单击事件。

OpenForms是关于表单的,因此
Application.OpenForms.OfType()
sender
是按钮。您需要将按钮链接到表单的东西。您可以使用
按钮.Tag
来保存此信息。然后需要
.FirstOrDefault()
而不是
.Single()
。它可能无法打开。在您的情况下,“\u form1”是什么?当我尝试直接引用我的表单时,它告诉我它是一个“类型,在给定上下文中无效。”@Ethashoe:“\u form1”、“\u form2”、“\u form3”和“button1”、“button2”、“button3”“这些只是示例,用您自己的表单和按钮替换它们我理解,但是当我这样做的时候,它给了我我在第一次评论中提到的错误,说它是一个类型。@EthanShoe:不确定是什么导致了错误,我用3个表单和3个按钮做了一个简单的例子,它可以工作-在字典中不使用表单类的名称,而是使用类实例的变量名<代码>Form1_Form1=新Form1()_ButtonFormDict.Add(button1,_form1)或者您可以只使用
\u buttonoformdict.Add(button1,newform1())
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();
        }
    }
}