关闭一个表格时打开上一个表格

时间:2013-02-27 23:17:01

标签: c#

首先,我是C#和一般编程的新手。我搜索得非常彻底,但我只能找到有人想要打开另一个表单并隐藏按下按钮的实例。

在这种情况下,当我在主“Form1”以外的任何表格上按(X)时,我的程序连续运行时出现问题。表单到表单导航工作正常。即:单击按钮隐藏主窗口并打开相应的表单,该表单上的“后退”按钮隐藏自身并显示(我猜另一个实例)之前的“主”表单。 - 我也可以使用一些指导。大声笑

我不介意如果按下X就关闭整个应用程序,但是我需要在所有窗口上显示“X”,如果按下X,所有窗口都需要退出整个应用程序。有什么建议?

提前致谢,

代码:

Form1中:

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public void btnTransaction_Click(object sender, EventArgs e)
            {
                Transaction transactionForm = new Transaction();
                Form mainForm = this;
                transactionForm.Show();
                mainForm.Hide();
            }
        }

交易表格:

    public partial class Transaction : Form
        {
            public Transaction()
            {
                InitializeComponent();
            }
            private void button4_Click(object sender, EventArgs e)
            {
                Form1 mainForm = new Form1(); //not sure if I'm doing this right..
                this.Hide();                  //I don't know how to "reuse" the original Form1
                mainForm.Show();
            }
        }

5 个答案:

答案 0 :(得分:1)

我建议您为此创建一个MDI容器。将MenuStrip从ToolBox拖放到Form1,然后在MenuStrip中创建ToolStripMenuItem“form2”。 现在你可以像这样在form1中调用你的form2

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            IsMdiContainer = true;
        }
        Form2 frm2;
        public void CreateMdiChild<T>(ref T t) where T : Form, new()
        {
            if (t == null || t.IsDisposed)
            {
                t = new T();
                t.MdiParent = this;
                t.Show();
            }
            else
            {
                if (t.WindowState == FormWindowState.Minimized)
                {
                    t.WindowState = FormWindowState.Normal;
                }
                else
                {
                    t.Activate();
                }
            }
        }
        private void form2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CreateMdiChild<Form2>(ref frm2);
        }
    }

通过单击ToolStripMenuItem,您可以触发ToolStripmenuItem事件,它将在Form1中显示Form2作为子项,即mdi容器,并在关闭form1时关闭。

答案 1 :(得分:0)

    public partial class Transaction : Form
    {
        Form1 _mainForm;

        public Transaction(Form1 mainForm)
        {
            InitializeComponent();
            _mainForm = mainForm;
        }
        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();  //since you always create a new one in Form1
            _mainForm.Show();
        }
    }

答案 2 :(得分:0)

您可以使用Form.ShowDialog()

调用此方法时,代码跟随(“ShowDialog()”下面的代码)直到对话框关闭后才会执行。

private void button4_Click(object sender, EventArgs e)
{
    Form1 mainForm = new Form1();
    this.Hide();                 
    mainForm.ShowDialog();
    this.Show();
}

答案 3 :(得分:0)

您可以使用ShowDialog()方法,该方法要求用户在返回上一个表单之前与新表单进行交互。例如,你可以试试这个:

public void btnTransaction_Click(object sender, EventArgs e)
{
    using (var transactionForm = new Transaction())
    {
      this.Hide();
      if (transactionForm.ShowDialog() == DialogResult.OK)
      {
          this.Show();
      }
    }
}

您可以在DialogResult上设置TransactionForm,如下所示:

private void button4_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
    this.Close();
}

这是在新表单上强制互动的一种非常标准的方式。

答案 4 :(得分:0)

protected override void OnClosing(CancelEventArgs e)
{
    this.Hide();
    menu menu = new menu("administrator");
    menu.ShowDialog();
    this.Close();
}

//快乐编码