【问题标题】:How can I navigate between forms如何在表单之间导航
【发布时间】:2011-06-24 03:52:57
【问题描述】:

我是 C# 和窗口形式的新手 我正在做一个项目,我遇到了一些问题

  1. 如何在窗口中导航表单(我有一个菜单条,单击时会显示一个项目“品牌”,所以当我单击它时,它应该在窗口中打开,我不想使用mdiparent/container,我有form1和form2,然后我把菜单条放在form1中,form1里面有一些东西,如果使用mdiparent/container,form1的内容/东西会阻塞form2)

2.我使用下面的代码,问题是我想关闭我在菜单条中单击“品牌”的表单1...但是如何???

public partial class Form1 : Form
{
    //  i put the menu strip in form1 design
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void Check_Click(object sender, EventArgs e)
    {
        Form2 Check = new Form2();
        Check.Show();
    }
}

【问题讨论】:

    标签: c# .net winforms visual-studio visual-studio-2010


    【解决方案1】:

    你不能只关闭Form1,因为它是主窗体,但你可以隐藏它。使用this.Hide()

    private void Check_Click(object sender, EventArgs e)
    {
        Form2 Check= new Form2();
        Check.Show();
        Hide();
    }
    

    [编辑]

    不确定这是否是所要求的。但是……

    表单间导航的实现方式有很多种,例如:

    Form1:

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.Tag = this;
        form2.Show(this);
        Hide();
    }
    

    Form2:

    private void button1_Click(object sender, EventArgs e)
    {
        var form1 = (Form1)Tag;
        form1.Show();
        Close();
    }
    

    【讨论】:

    • 如果您能说出如何在不创建 Form1 的新实例的情况下从 Form2 导航回 Form1(因为它处于隐藏模式),那将会很有帮助
    • @Coder323 - 我没有意识到这是被问到的。更新了答案。
    • 我确信提问者在返回 Form1 时会遇到问题,只是想帮忙....感谢您的代码.....
    【解决方案2】:

    我认为您应该创建用户控件而不是不同的表单。然后您可以根据菜单中的选择在主面板中添加您的用户控件。

    最初类似于下面的内容

    this.panel.Controls.Clear();
    this.panel.Controls.Add(new UserControl_For_Form1());
    

    一旦用户点击菜单中的其他选项。

    this.panel.Controls.Clear();
    this.panel.Controls.Add(new UserControl_For_Form2());
    

    如果您真的想使用您目前使用的方式。下面的代码会有所帮助。

    为 Form2 添加一个 Form1 属性,并将 form1 实例解析为 Form2 及其构造函数。

    public partial class Form2 : Form
        {
            private Form1 form1;
    
            public Form2(Form1 myForm)
            {
                InitializeComponent();
                form1 = myForm;
            }
        }
    

    显示form2并隐藏form1。

    private void Check_Click(object sender, EventArgs e)
    {
        Form2 Check= new Form2(this);
        Check.Show();
        Hide();
    }
    

    现在在form2关闭事件中,您可以显示form2中的form1实例并关闭form2。

    使用MDI form 是您的另一种选择。

    【讨论】:

      【解决方案3】:

      问这个问题已经 7 年了,但如果有人仍在寻找解决方案,我想给出一个答案。如果您使用的是 DevExpress,您可以将 Navigation Frame 添加到您的程序中。您可以在不同的组件之间切换,例如 GridControl、GroupBox 等。因此,您不必创建额外的表单即可在表单之间导航。

      【讨论】:

        猜你喜欢
        • 2019-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        • 1970-01-01
        • 2022-11-25
        相关资源
        最近更新 更多