2011-05-07 129 views
1

我有一個簡單的模態表單,我必須檢查用戶輸入的數據。但驗證後,表單會關閉。它表現得像這樣,因爲不是空的DialogResult屬性,但我需要這個值用於其他目的(在父表單中) 任何想法?模式驗證

一些代碼來澄清一些事情

 

//This method creates and calls a modal form. 
public static Definition edit(Definition w) 
{ 
    EditForm ed = new EditForm(); 
    DialogResult dr = ed.ShowDialog(); 
    if (dr == DialogResult.OK) 
    { 
     //update some fields of passed object 
    } 
    //other code 
} 

private void btnSave_Click(object sender, EventArgs e) 
{ 
     if (validateForm()) 
     { 
      DialogResult = DialogResult.Yes; 
      Close(); 
     } 
} 

 
+2

你會進一步解釋你的問題嗎?我不能你的問題。 – 2011-05-07 19:45:44

+0

某些代碼會有幫助 - 但聽起來像是您濫用了「DiaglogResult」。你在父母形式中使用了什麼? – ChrisF 2011-05-07 19:53:25

回答

4

我會做這種方式:

private void btnSave_Click(object sender, EventArgs e) 
{ 
     if (validateForm()) 
     { 
      DialogResult = DialogResult.Yes; 
      Close(); 
     } 
     else 
     { 
      DialogResult = DialogResult.None; 
     } 
} 

即正如你所說,清除DialogResult

+1

好的 - 也可以使用;) – ChrisF 2011-05-07 21:28:34

0

添加FormClosing事件處理程序,然後如果驗證失敗設置e.Cancel = true

private void EditForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (this.DialogResult == DialogResult.OK) 
    { 
     e.Cancel = !ValidateInput(); 
    } 
} 

這會留下子窗體打開,讓用戶修改錯誤。您可以通過檢查DialogResult來檢查是否點擊了「確定」或「取消」/窗口關閉按鈕,並且只有在OK時才執行驗證。

+0

看來我必須清除DialogResult屬性,對吧? – drv 2011-05-07 20:30:14

+0

@drv - 如果驗證失敗,則不設置它。不是因爲你不調用'Close()',所以子窗體保持打開狀態,這真的很重要。 – ChrisF 2011-05-07 20:35:07

+0

嗯,我將ok_button DialogResult屬性設置爲「OK」,即使Close未被調用,它也不起作用。表單會以任何方式關閉。只有在事件處理程序中將屬性設置爲「OK」時,它才能更好地工作。但我必須檢查它以確保:) – drv 2011-05-07 20:40:29