ボタン(X)の近くの窓を使用して上のErrorproviderショーエラー
-
21-09-2019 - |
質問
私は窓の閉じるボタン(X)を使用して、フォームを閉じるしようとすると、オフのろわエラープロバイダを有効にする方法はあります。これは、検証を発射すると、ユーザは多くの人が(X)ボタンを使用して、フォームを閉じる傾向があるため、彼はユーザビリティの問題になりますform..thisを閉じることができます前に、すべてのフィールドを埋めるために持っています。
私はfalseに原因の検証と、キャンセルボタンを配置している、それはまた、検証を発射します。
私はあなたがForm.Closeを使用している場合()関数の検証が実行されていることを言って誰かを見つけました... どのように私はこの迷惑な機能を乗り越えることができます。
私は、MDIのstuructureを持っていると
を使用してフォームを表示します CreateExam.MdiParent = Me
CreateExam.Show()
MDI親のメニュー項目をクリックしたときに、
と検証
セットとしてこれを持っていますPrivate Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If String.IsNullOrEmpty(TextBox1.Text) Then
Err.SetError(TextBox1, "required")
e.Cancel = True
End If
If TextBox1.Text.Contains("'") Then
Err.SetError(TextBox1, "Invalid Char")
e.Cancel = True
End If
End Sub
すべてのヘルプははるかに高く評価されます。 ユーザーは、私の場合には、問題を引き起こしている近すぎるボタンとしてコマンドボタンを使用して問題を持つとされた場所のみ示した結果をグーグル
解決
はValidateChildren()メソッドは、閉鎖からフォームを防止します。修正にフォームにこのコードを貼り付けていること:
protected override void OnFormClosing(FormClosingEventArgs e) {
e.Cancel = false;
}
他のヒント
これは非常に簡単な修正は、フォームのClosing
イベントでは、例えばblnLeave
のために、フォームを残し示すフラグを設定して、フォームがロードされるとき、セットをFalse
イベントがトリガされますClosing
、にフラグを設定することそのイベントハンドラ内True
、その変更は次のように
Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating If (blnLeave) Then e.Cancel = False; Return End If If String.IsNullOrEmpty(TextBox1.Text) Then Err.SetError(TextBox1, "required") e.Cancel = True End If If TextBox1.Text.Contains("'") Then Err.SetError(TextBox1, "Invalid Char") e.Cancel = True End If End Sub
の編集のOPのコメントにつきとして含めるため、この答えを修正しました。示すように、私の提案は、フォームのClosedイベントを処理することです。
Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed blnLeave = True End Sub
と
...ここに示すように、フォームのウィンドウプロシージャのオーバーライドで、ここでそれを処理Private Const SC_CLOSE As Integer = &HF060 Private Const WM_MENUSELECT As Integer = &H11F Private Function LoWord(ByVal Num As Integer) As Integer LoWord = Num & &HFFFF End Function Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If m.Msg = WM_MENUSELECT Then If LoWord(m.WParam.ToInt32()) = SC_CLOSE Then ' Handle the closing via system Menu blnLeave = True End If End If MyBase.WndProc(m) End Sub
所属していません StackOverflow