我有一个带有2个表单的应用程序,对于那些表单,我创建了一个我在两个表单上设置的菜单。
菜单上只有一个menuStrip项,我只想点击“test1”重定向到Form1,当我点击“test2”时,我想重定向到Form2。
但是如果test1已经打开/显示我不想再次显示他和test2相同。
我的菜单中的代码:
public partial class Menu : UserControl
{
public Menu()
{
InitializeComponent();
}
private void test1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
Form2 f2 = new Form2();
f2.Hide();
f1.Hide();
f1.ShowDialog();
}
private void test2ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
Form2 f2 = new Form2();
f1.Hide();
f2.Hide();
f2.ShowDialog();
}
}
我只想要像Form1和Form2中的Buttons一样的结果:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
Form1 f1 = new Form1();
f1.ShowDialog();
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
Form2 f2 = new Form2();
f2.ShowDialog();
}
}
我认为表格的Visible属性可以帮助我,但不是......
问题是,当我点击我的按钮时,它会打开一个新窗口,但是当我的表单已经打开时,我不想再打开它。
感谢您的回复,我希望我对此事先感到抱歉。
答案 0 :(得分:1)
每次执行点击处理程序代码时,您正在创建新表单。
这是一种方式,但它令人讨厌,我不会真的推荐它。我假设form1是你的应用程序的入口,它也是应用程序的退出。此解决方案使用单例来保存f1 / f2实例。
public static class Global
{
static Global()
{
f2 = new Form2();
}
public static Form f1;
public static Form f2;
}
您的菜单已更改:
public partial class Menu : UserControl
{
public Menu()
{
InitializeComponent();
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
Global.f2.Hide();
Global.f1.Hide();
Global.f1.Show();
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
Global.f1.Hide();
Global.f2.Hide();
Global.f2.Show();
}
public void SetForm1(Form form)
{
Global.f1 = form;
}
public void SetForm2(Form form)
{
Global.f2 = form;
}
}
形式:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Global.f1 = this;
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
Global.f2.ShowDialog();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
Global.f1.Show();
}
}
希望这有帮助。
答案 1 :(得分:0)
你的逻辑错了。
在我看来,您希望根据用户选择' menuStrip'来显示不同的内容。您需要查看动态控件加载而不是加载不同的表单。
你可以拥有一个带有' menuStrip'的主菜单。和一个小组。定义一些用户控件,并根据用户选择将它们动态添加到该面板。
片段
public MainForm : Form
{
public MainForm()
{
// code
}
public void MenuStrip_OptionSelected(object sender, EventArgs e)
{
Panel1.Controls.Clear();
switch(MenuStrip.SelectedValue)
{
case "UserControl1" : Panel1.Controls.Add(new UserControl1()); break;
...
}
}
}
public UserControl1 : UserControl
{
// code
}