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
    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

あなたは使用を使用することができます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
protected override void OnClosing(CancelEventArgs e)
{
    this.Hide();
    menu menu = new menu("administrator");
    menu.ShowDialog();
    this.Close();
}

//ハッピーコーディング

于 2017-10-21T04:27:16.847 に答える