.NET Framework (current version)其他版本
獲取或設(shè)置對(duì)話框結(jié)果值,即從返回的值 ShowDialog 方法。
屬性值
Type: System.Nullable<Boolean>
一個(gè) Nullable<T> 類型的值 Boolean。 默認(rèn)值為 false。
Exception | Condition |
---|---|
InvalidOperationException | DialogResult 在通過(guò)調(diào)用打開(kāi)一個(gè)窗口前設(shè)置 ShowDialog。 - 或 - DialogResult 通過(guò)調(diào)用打開(kāi)的窗口上設(shè)置 Show。 |
DialogResult 可以使用的代碼中顯示一個(gè)對(duì)話框,以確定用戶是否接受 (true) 或已取消 (false) 對(duì)話框。 如果已接受對(duì)話框中,這表示打開(kāi)對(duì)話框中檢索數(shù)據(jù)收集的用戶,并對(duì)其進(jìn)行處理的代碼。 如果對(duì)話框已被取消,但是,這表示調(diào)用的代碼應(yīng)停止任何進(jìn)一步的處理。
在所有這些情況下, DialogResult 是 false 默認(rèn)情況下。
對(duì)話框通常提供一個(gè)用于取消對(duì)話框中,即按鈕的特殊按鈕其 IsCancel 屬性設(shè)置為 true。 或者它按下時(shí),或按 ESC 鍵時(shí),這種方式配置一個(gè)按鈕將自動(dòng)關(guān)閉窗口。 在這些情況下,任一 DialogResult 保持 false。
對(duì)話框中通常還提供一個(gè)接受按鈕,這是其 IsDefault 屬性設(shè)置為 true。 這種方式配置一個(gè)按鈕將引發(fā)其 Click 時(shí)它或 ENTER 鍵被按下事件。 但是,它不會(huì)自動(dòng)關(guān)閉該對(duì)話框中,也不會(huì)將設(shè)置 DialogResult 到 true。 您需要手動(dòng)編寫此代碼中,通常從 Click 默認(rèn)按鈕的事件處理程序。
DialogResult 是 null 時(shí)顯示對(duì)話框但不接受或已取消。
DialogResult 僅時(shí)可以設(shè)置 Window 打開(kāi)通過(guò)調(diào)用其 ShowDialog 方法。
在程序中,經(jīng)常會(huì)彈出一個(gè)對(duì)話框來(lái)讓用戶填寫一些信息,填寫完成后,當(dāng)用戶點(diǎn)擊“確定”按鈕后,在主窗體中進(jìn)行其他的處理。比如一個(gè)簡(jiǎn)單的例子,在主窗體中有一個(gè)菜單,是“增加用戶”,當(dāng)點(diǎn)擊這個(gè)菜單之后,我們需要彈出一個(gè)增加用戶的窗體出來(lái),就假設(shè)“增加用戶”的窗體叫frmAddUser,那么代碼如下:
frmAddUser frm = new frmAddUser(); if (frm.ShowDialog() == DialogResult.OK) { //todo list }
一般都是設(shè)置“增加用戶”窗體中“確定”按鈕的DialogResult的屬性,
設(shè)置完成后,只要用戶一點(diǎn)擊“確定”按鈕,那么對(duì)話框就關(guān)閉,重新回到主窗體,然后可以在主窗體中進(jìn)行相應(yīng)的處理,比如把數(shù)據(jù)寫入數(shù)據(jù)庫(kù)等。
現(xiàn)在有一個(gè)問(wèn)題就是,“增加用戶”的窗體如下:
如果我想判斷一下,用戶輸入的郵件格式是否正確,那么我該把這段代碼放在哪呢?如果放在郵件輸入框那個(gè)TextBox的TextChaged事件中,那么用戶輸入一個(gè)字母都會(huì)激發(fā)那個(gè)事件,這樣就不太好,如果放在“確定”按鈕的事件中,那么如果用戶的郵件格式輸入的不正確,就不應(yīng)該返回主窗體,而是繼續(xù)留在這個(gè)窗體上,等待用戶修改,可是事實(shí)卻不是這樣,因?yàn)槟阍O(shè)置了“確定”按鈕的Dialogue屬性,只要用戶一點(diǎn)擊按鈕,主窗體中的
if (frm.ShowDialog() == DialogResult.OK)
這個(gè)判斷就為真,不管你的郵件格式是否正確,主窗體都會(huì)繼續(xù)向下執(zhí)行。
最后,終于找到了一個(gè)比較好的解決辦法,都以為只有Button才有Diagolue屬性,沒(méi)想到窗體也有這個(gè)屬性。所以我們根本就不需要設(shè)置“確定”按鈕的Diagolue屬性,直接把判斷郵件是否合格的方法放在”確定”按鈕的點(diǎn)擊事件中,如果符合,那么就設(shè)置窗體的Diagolue屬性為OK,用下面的代碼:
this.DialogResult = DialogResult.OK;
這樣主窗體中的if (frm.ShowDialog() == DialogResult.OK)這個(gè)判斷也為真,它會(huì)繼續(xù)執(zhí)行下面的代碼。如果不符合格式,就啥也不做,因?yàn)闆](méi)有設(shè)置窗體的Diagolue屬性為OK,所以“增加用戶”的對(duì)話框永遠(yuǎn)不會(huì)關(guān)閉,主窗體也會(huì)一直等待,而不會(huì)去執(zhí)行其他的代碼。
例子比較簡(jiǎn)單,只是我原來(lái)不知道這些,所以在這里記錄一下。當(dāng)然這只是一種辦法,你也可以用其他的方法來(lái)解決類似這樣的問(wèn)題。
完整代碼實(shí)例:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace _2014050904DialogResult { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public string message = "You did not enter a server name. Cancel this operation?"; public string caption = "No Server Name Specified"; public MessageBoxButtons buttons = MessageBoxButtons.YesNo; public DialogResult result; public void show() { //顯示MessageBox. result = MessageBox.Show(this, message, caption, buttons); //如果點(diǎn)擊的是"YES"按鈕,將form關(guān)閉. if (result == DialogResult.Yes) { // Closes the parent form. this.Close(); } } private void Form1_Load(object sender, EventArgs e) { show(); } } }
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇