2012-04-15 7 views
-1

私はVBでフォームの検証を行っています、私はtxtName_LostFocus機能を使用して、テキストフィールドのデータを検証し、間違った入力に私はtxtName.Focus()を使用。それは私のためにうまくいく。しかし問題は、ユーザーが有効なテキストを入力しない限り、私のEXITボタンも機能しないことです。このソリューションを修正するための解決策はありますか?VBフォームの検証の問題

+0

あなたが正確に何をやっているコードを配置することができます。 – coder

答えて

2

問題は、ドキュメントを慎重に読んでいないことが原因です。 LostFocus eventのためのドキュメントは、このイベントのためのハンドラメソッドでは(例えば、Focus method呼び出すことで)あなたがない試みがフォーカスを設定する必要があることを非常に明確にする:

注意

ないでくださいEnter、GotFocus、Leave、LostFocus、Validating、またはValidatedイベントハンドラ内からフォーカスを設定しようとしました。そうすると、アプリケーションまたはオペレーティングシステムが応答を停止する可能性があります。詳細については、http://msdn.microsoft.com/libraryにあるMSDNライブラリの「メッセージとメッセージキューについて」のトピックの「キーボード入力リファレンス」セクションの「WM_KILLFOCUS」トピックと「メッセージデッドロック」セクションを参照してください。

より良い解決策は、Validating eventを処理することです。入力は、Validatingイベントハンドラメソッドで検証されます。これは、.NET Frameworkによって自動的に呼び出されます。

入力が有効な場合は何も行いません。入力がない有効である場合は、下流の事象のすべてを抑制することが原因、trueCancelEventArgsパラメータのCancelプロパティを設定します。

Private Sub myTextBox_Validating(ByVal sender As Object, _ 
           ByVal e As ComponentModel.CancelEventArgs) _ 
          Handles myTextBox.Validating 
    If Not Valid(myTextBox.Text) Then 
     ' Validation failed, so cancel the event and pre-select the text. 
     e.Cancel = True 
     myTextBox.Select(0, myTextBox.Text.Length) 

     ' Optionally (but recommended): Set an ErrorProvider control. 
     ' errorProvider.SetError(myTextBox, "Invalid input") 
    End If 
End Sub 
+0

正常に動作しますが、ユーザーは有効な情報まで終了できません。そのユーザーはフォームを離れる/出る可能性があります。間違ったテキストを入力してもかまいません。 –

+0

@Shahそれもリンクされたドキュメントに記載されています。 "Exit"ボタンの 'CausesValidation'プロパティ(および他の任意のコントロール)を' true'に設定すると、 'Validating'イベントまたは' Validated'イベントが発生しません。 –