2017-12-14 8 views
-2

これは私が持っているシナリオです。私は検証イベントを使用しています。私が間違った値を導入した場合(私の検証イベントのロジックが間違っていると判断するため)、Tabキーを押したときにそのTextBoxからフォーカスを解放することはありませんが、それはクリックしたときにも行いません別のTextBox?他のTextBoxをクリックしたときに検証に失敗したTextBoxからフォーカスを解放する

Focus problem on image

私は、検証について何かが足りないのですか?もし私がフォーカス以上の自由を望んでいる場合、データを検証する別の方法を使用する必要がありますか、それを解放するクリックイベントを実装することはできますか?

この私が使用して、検証イベントは、例えば、名前(「ノンブル」)のためにされています

private void tbNombre_Validating(object sender, CancelEventArgs e) 
    { 

     if (!new Validator().ValidateWithRegex("^[a-zA-ZÁáÀàÉéÈèÍíÌìÓóÒòÚúÙùÑñüÜ ]{2,20}$", tbNombre.Text)) 
     { 
      e.Cancel = true; 

      MessageBox.Show(
       "El nombre debe estar formado por letras (longitud: 2 a 20 caracteres)", 
       "Error en nombre", 
      MessageBoxButtons.OK, MessageBoxIcon.Error); 
      tbNombre.Text = ""; 
     } 
     else 
     { 
      _emp.Nombre = tbNombre.Text; 
     } 
    } 
+1

コードを投稿してください。 – sab669

+0

私が持っているコードは、 'CancelEventArgs.Cancel'を間違った値に設定した場合にtrueに設定するメソッドの実装を検証するものです。 'TextBox'の' CausesValidation'プロパティはtrueです。何が正確に必要なのですか? – JD0001

+0

テキストボックスのイベントハンドラ。 – sab669

答えて

0

フォーカスを持っているかを制御操作するためのValidatingイベントハンドラの性質である、さらに設定このイベントの焦点は悪い考えです。 ValidatingイベントのMSDNから

あなたは、セレクタSelectNextControlメソッドを呼び出すことによって、(その上のTAB、SHIFT + TABなど)を、キーボードを使用するか設定することで、フォーカスを変更するときContainerControl.ActiveControlの現在のフォームにプロパティ、次の順序で発生したイベントを集中:

は、のGotFocusを入力のまま、検証、検証済み、のLostFocus


あなたは、マウスを使用して、またはフォーカスメソッドを呼び出すことによって、フォーカスを変更するには、次の順序で発生したイベントを集中:


検証済み

、入力のGotFocus、のLostFocus、まま、検証

Enter、GotFocus、Leave、LostFocus、Validating、またはValidatedイベントハンドラ内からフォーカスを設定しないでください。そうすると、アプリケーションまたはオペレーティングシステムが応答を停止する可能性があります。

だから、のGotFocus /休暇/のLostFocusイベントはすべて、トリガを取得し、このValidatingイベントで操作され、そしてそのため、ここでは自分自身を集中処理するためにしようとすると悪い考えです。

フィールドを検証してフォーカスを変更できるようにするには、コードをLeaveイベントに移動する必要があります。ここでも、テキストボックスの値を検証しながら、他のコントロールにフォーカスを当てることができます。

+0

ありがとうございました – JD0001

関連する問題