0

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

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

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

提前致谢,

代码:

表格1:

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

5 回答 5

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 事件时,它会将 Form2 显示为 form1 中的子项,即 mdi 容器,并在您关闭 form1 时关闭。

于 2013-02-28T00:03:54.830 回答
0

您可以使用Form.ShowDialog()

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

private void button4_Click(object sender, EventArgs e)
{
    Form1 mainForm = new Form1();
    this.Hide();                 
    mainForm.ShowDialog();
    this.Show();
}
于 2013-02-27T23:23:51.890 回答
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();
}

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

于 2013-02-27T23:25:24.877 回答
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();
        }
    }
于 2013-02-27T23:23:14.473 回答
0
protected override void OnClosing(CancelEventArgs e)
{
    this.Hide();
    menu menu = new menu("administrator");
    menu.ShowDialog();
    this.Close();
}

//快乐编码

于 2017-10-21T04:27:16.847 回答