表單間 ShowDialog()、DialogResult.OK 的用法

 

範例如下

Form1.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();

            if (form2.ShowDialog() == DialogResult.OK)
            {
                this.textBox1.Text = form2.ToGetValue();//從form2取值設定到form1
            }
        }
    }
}

 

Form2.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public string ToGetValue()
        {
            return this.textBox1.Text;
        }

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

    }
}

 

說明:

1、當於 A 表單 instance 裡,執行 B 表單的 ShowDialog() 方法時,將會把該 B 表單給打開。

2、當 B 表單的 DialogResult 屬性被明確指定 DialogResult 的值之後,

其動作將會關閉 B 表單,而回到 A 表單;

此時不用特別去把 B 表單做 .Close() 或是 .Dispose() 方法,系統會自動處理。

3、而於 A 表單 instance 裡呼叫 B 表單的 ShowDialog() 方法後,也會回傳 B 表單的 DialogResult 狀態。

 

參考資料:

WinForms Dialog Form — Close or Dispose?