C# 从发件人处查找打开的表单
我有24个按钮,每个按钮打开一个单独的表单。我希望有一种方法可以在单击所有按钮时打开/并将每个按钮置于最前面,这样我就不必为每次按钮单击创建单独的方法,这样看起来就像这样: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
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();
}
}
}