2016-03-04 46 views
0

我想在允許模式框關閉之前驗證一些數據,但它在驗證發生之前似乎關閉。這是我的代碼如何中止模式框關閉?

Public Class my_popup 

Inherits Form 

Dim result = Me.ShowDialog() 
If result = DialogResult.OK Then 
    If key = Nothing Then 
     If last_name.Text <> "" Then 
     MessageBox.Show("The user is not in the database.") 
     ' Abort closing and leave dialog open. 
     End If 
    Else 
    save_it() 
    End If 
End If 

End Class 

當消息框出現時,模態窗體已經關閉。我如何避免這種情況發生?

+0

_Me.ShowDialog()_?你在哪種方法中調用這個方法? – Steve

+0

我編輯它以顯示課程。 – user2721815

+0

您只是將MessageBox.Show()調用放在了錯誤的位置。它只能在關閉對話框後運行*。把它放在它所屬的地方,在確定按鈕中單擊事件處理程序。不滿意時不要設置DialogResult屬性。 –

回答

0

你的代碼似乎有點奇怪。通常情況下,模式對話框會從父窗體調用,需要一些輸入並等待模態對話框完成其工作。如果你需要某種驗證的模式對話框並且保持模態對話框打開,如果再驗證失敗,你應該寫這樣的事情

在調用形式:

Using frm = new my_popup() 
    if frm.ShowDialog() = DialogResult.OK Then 
     ..... if we enter here the validation is OK... 
    End If 
End Using 

然後,在my_popup類,通常你有一個OK按鈕(對於這個例子叫做buttonOK),它被設置爲表單的AcceptButton,它的屬性DialogResult被設置爲DialogResult.OK。

然後,當您單擊確定按鈕,你寫你的驗證,在按鈕

Protected Sub buttonOK_Click(sender as Object, e as EventArgs) Handles buttonOK.Click 

     If last_name.Text <> "" Then 
      MessageBox.Show("The user is not in the database.") 
      ' Abort closing and leave dialog open. 
      Me.DialogResult = DialogResult.None 
     Else 
      Dim saved = save_it() 
      if saved = false Then 
       MessageBox.Show(....fail to save....) 
       Me.DialogResult = DialogResult.None 
      End If 
     End If 
End Sub 

這裏的關鍵點是設置my_popup形式DialogResult.None財產的DialogResult的事件處理程序。這將阻止表單的自動關閉,並且您的用戶可以輸入必要的修補程序來輸入....

+0

好的,謝謝。我會去做。 – user2721815