2016-11-09 4 views
0

アクション時に2つのボタン付きMessageBoxを表示するFormClosingイベントハンドラがあります。 したがって、ユーザーが「はい」をクリックすると、Forループを使用して値がチェックされ、 valueこれは、すべての変数が残った状態で新しいものを開くことなく、この同じ形式にとどまるべきである。無効なデータがアサートされた後にフォームを閉じるのを防ぐ

どうすれば実現できますか?

示すように簡略化コードである: (クラスコードがMainForm.vb CLASコードによって使用されるEditDataForm.vbに存在する)FormClosingのイベントハンドラで

''' Closing Event that fired upon user closing the Form 
Private Sub EditDataForm_FormClosing(sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing 

    If MessageBox.Show(Me, "Do you want to save your changes?", "Unsaved Changes!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.Yes Then 
     ButtonSave_Click(Me, e) 
    Else 
     Exit Sub 'Exit this Sub 

    End If 
End Sub 




''' Button Save Click Event 
    Private Sub ButtonSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSave.Click 

Dim rowIndex As Integer 
Dim CheckDouble As Double 

'' Leave the oth and 1th row 
For rowIndex = 2 To masterDataGridView.RowCount - 1 

    If TypeOf(masterDataGridView.Rows(rowIndex).Cells("Val").Value) is String Then 

     Double.TryParse(masterDataGridView.Rows(rowIndex).Cells("Val").Value, CheckDouble) 
     If(CheckDouble <= 0) Then 
      MsgBox("Decimal Number Expect in place of:" & masterDataGridView.Rows(rowIndex).Cells("Val").Value & "at Row Number:" & rowIndex + 1, MsgBoxStyle.Critical, "FAILURE") 

      '''''''' HOW CAN I STAY ON THIS SAME FORM 
      Exit Sub 
     End If 
    End If 


Next 

''Other Save Methods etc... 

End Sub 

答えて

1

FormClosingEventArgsCancelパラメータのプロパティを設定します本当に。

それはクロージングからフォームを防ぐことができます:

https://msdn.microsoft.com/en-us/library/system.windows.forms.formclosingeventargs(v=vs.110).aspx

アプリケーションでこれを統合するために、私は、ユーザー入力を検証するメソッドを作成します。
このメソッドは、フォーム上のデータが有効かどうかを判断するために使用できるもの(ブール値など)を返す必要があります。

はformclosingのEventHandlerの中で、この方法を使用して、フォームが閉じてするかどうそこに確認してください。

Private Sub EditDataForm_FormClosing(sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing 

    If IsFormDataValid() = False Then 

     e.Cancel = true 
     Exit Sub 
    End if 

    SaveData() 
End Sub 

Private Function IsFormDataValid() As Boolean 

    ' Verify input, return true if data is valid; otherwise false. 
End Function 
+0

あなたが示唆したように真e.Cancel =を追加した後。 Like: ButtonSave_Click(Me、e) e.Cancel = True これは予想通りです。ありがとう。 – user3051677

+0

あなたはC#とVB.NETの構文が混在しているようです:)。セミコロンはVB.NETでは使用されず、比較演算子は '='です。 –

関連する問題