2017-07-05 6 views
0

私はいくつかのフィールドがデータテーブルにバインドされたVB.Netアプリケーションを持っています。バインドされたフィールドにエラーがあるときにフォーカスを移動するにはどうすればよいですか?

は、ここに私のコードです:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    Me.DxErrorProvider1 = New DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(Me.components) 
    Dim DT As DataTable = GetDT() 
    Me.TextEdit1.DataBindings.Add("EditValue", DT, "C1", True, DataSourceUpdateMode.OnValidation, "") 
End Sub 

Function GetDT() As DataTable 
    Dim DT As New DataTable 

    Dim i As Integer = 0 
    DT.Columns.Add(New DataColumn("C1", i.GetType)) 

    Dim R As DataRow = DT.NewRow 
    R.Item(0) = 15 
    DT.Rows.Add(R) 

    Return DT 
End Function 

ときにユーザーがフィールドに誤った値。フォーカスはもう動くことができません。

フルコードには実際に複数のフィールドが含まれていますが、誤った値があっても次のフィールドを移動できるようにしたいと考えています。赤いアイコンが表示されるので、後で修正することができます。

これを実現するにはどうすればよいですか?

ありがとうございました。ここで

+1

両方のIFのいずれかにTextEdit1.BackColor = Color.redまたはTextEdit1.BackColor = Color.Emptyを追加することができます。データがコミットされるのを防ぐために、関連する 'Binding'の' DataSourceUpdateMode'を 'Never'に変更しなければならないと思います。コントロールが必要な場合はコントロールのフォーカスが失われたときに検証を処理し、変更をコミットするときには 'Binding'で' WriteValue'を呼び出します。 – jmcilhinney

+0

実際に私は新しいデータをコミットしたくありません。フォーカスを別のフィールドに移動してエラーにするだけです –

答えて

1

がソリューションです:

Me.AutoValidate = Windows.Forms.AutoValidate.EnableAllowFocusChange 
-1

私はarroundの考えていたと私は、これが取得スルー考え出し、私はそれはいくつかの方法が役立ちます願っています。

 AddHandler TextEdit1.LostFocus, Sub() 
              If TextEdit1.ErrorText <> "Focus released" And TextEdit1.ErrorText <> "" Then 
               TextEdit1.DataBindings(0).DataSourceUpdateMode = DataSourceUpdateMode.Never 
               DxErrorProvider1.SetError(TextEdit1, "Focus released") 
              Else 
               DxErrorProvider1.SetError(TextEdit1, "") 
               TextEdit1.DataBindings(0).DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged 
              End If 
             End Sub 

また、あなたはデータが有効でない場合は、基礎となる `DataRowView`に新しいデータをコミットすることはできませんセグメント

+0

ユーザーのlangagugeが英語でない場合はどうなりますか? "無効な値"は認識されません...解決策は非常に簡単です:Me.AutoValidate = Windows.Forms.AutoValidate.EnableAllowFocusChange –

+0

はい、ありがとう、それはまっすぐです! – Abra001

+0

@ThomasCarltonコーダーが自分のマザーフォームのフォーカスコントロールをアンバウンドにしたくない場合は、このままにしておきます。 – Abra001

関連する問題