应用程序Windows Form C#使用菜单(用户控件)

时间:2015-10-11 19:37:55

标签: c# forms user-controls

我有一个带有2个表单的应用程序,对于那些表单,我创建了一个我在两个表单上设置的菜单。

菜单上只有一个menuStrip项,我只想点击“test1”重定向到Form1,当我点击“test2”时,我想重定向到Form2。

但是如果test1已经打开/显示我​​不想再次显示他和test2相同。

My menu

我的菜单中的代码:

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

我的表格1: Form1

我的表格2: Form2

我只想要像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属性可以帮助我,但不是......

问题是,当我点击我的按钮时,它会打开一个新窗口,但是当我的表单已经打开时,我不想再打开它。

感谢您的回复,我希望我对此事先感到抱歉。

2 个答案:

答案 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
}