- PR -

Validatingでは

投稿者投稿内容
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-23 17:25
 こんばんは。もう1点お聞きします。

VB2005で、いくつかのテキストボックスを配置し
それぞれ入力内容をチェックします(日付であるとか)

入力後、更新ボタンをクリックし内容を更新する訳ですが
問題は、どうエラーの時カーソルを制御するかです。

当然、更新ボタンのCausesValidationはFalseに
しておきますが、1度あるテキストボックスに
Focusが移ると、もう他のテキストボックスには
移れないという問題があります。

Leaveだと、エラーでも次に移ってしまいますし..

Enterキーを押したときだけ、入力内容をチェックするようにしたりとか

みなさんは、どのような方法をとっていますか?

ご教授頂けないでしょうか?
宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-08-23 17:31
引用:

LANVINさんの書き込み (2007-08-23 17:25) より:

みなさんは、どのような方法をとっていますか?


案件次第ではありますが、私のユニットではこのような方法を取っています。エラーロジックを書くだけでタイミングを意識する必要はなくなりますし、アクセシブルでユーザーの評判も良いです。

# リンク先が見れない場合は Google のキャッシュを利用してください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-23 18:59
じゃんぬねっとさん、ありがとうございます。
なんだかWindowsっぽいですね。

ErrorProvider1.SetErrorでエラー表示はOKなのですが

MsgBox(ValidateChildren())を更新ボタンクリック
で表示させてもエラー有りでも無しでもTrueが返って来ます。

それともう1点、最終チェック時に
ErrorProviderの内容を全て表示させると
ありますが、表示方法を
教えて頂けないでしょうか?

すいません、宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-08-23 19:11
引用:

LANVINさんの書き込み (2007-08-23 18:59) より:

MsgBox(ValidateChildren())を更新ボタンクリックで表示させてもエラー有りでも無しでもTrueが返って来ます。


これは、Validating イベント引数 CancelEventArgs の Cancel プロパティを true にしていないからでしょう。

引用:

それともう1点、最終チェック時にErrorProviderの内容を全て表示させるとありますが、表示方法を教えて頂けないでしょうか?


SetError メソッドとは逆で GetError メソッドを使ってエラーを収集しましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-23 19:40
じゃんぬねっとさん、何度もすいません。

これは、Validating イベント引数 CancelEventArgs の Cancel プロパティを true にしていないからでしょう。

とありますが、Trueすると抜けない為コーディングしなかったのですが・・・
この部分をもう少し教えて下さい。

短いソースなので載せます。

Public Class frmG3
Dim TextDate(2) As TextBox
'************************************************************************
' frmG3_Load
'************************************************************************
Private Sub frmG3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
TextDate(0) = TextBox0
TextDate(1) = TextBox1
TextDate(2) = TextBox2
End Sub
'*********************************************************************
' Button1_Click(終了)
'*********************************************************************
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Close()
End Sub
'***********************************************************************
' Button2_Click(更新)
'***********************************************************************
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If ValidateChildren() Then
If vbNo = MsgBox("更新しますか?", MsgBoxStyle.YesNo) Then
Exit Sub
End If
Else
MsgBox("入力エラーのテキストボックスがあります")
End If
End Sub
'*************************************************************************
' TextBox入力
'**************************************************************************
Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox0.Validating, TextBox1.Validating, TextBox2.Validating
If ActiveControl.CausesValidation = False Then
Exit Sub
End If
'
Dim index As Integer = Array.IndexOf(TextDate, sender)
If Not IsDate(TextDate(index).Text) Then
ErrorProvider1.SetError(TextDate(index), "日付形式でない")
Else
ErrorProvider1.SetError(TextDate(index), "")
End If
End Sub
End Class

テキストボックスが3つと、ボタンが2つです。
ボタン1のみCausesValidationをfslseにしてあります。

If ValidateChildren() Then
で判断させたいのですが

どうぞ、宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-08-23 19:58
ValidateChildren メソッドでどうしてもやりたいのであれば、ValidateChildren メソッドの場合のみ Cancel = true になるようなフレームワークを考える必要があります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-23 22:23
じゃんぬねっとさん、ありがとうございます。

具体的にはValidateChildrenでもう1度
TextBox1_Validatingイベントが発生するのですが
何かの判断でValidateChildrenからか、通常の入力からか
変数か何かで判断しCancel プロパティを true する、しないとすることですか?

もう1歩よろしくお願いします。
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-08-23 22:23
じゃんぬねっとさん、ありがとうございます。

具体的にはValidateChildrenでもう1度
TextBox1_Validatingイベントが発生するのですが
何かの判断でValidateChildrenからか、通常の入力からか
変数か何かで判断しCancel プロパティを true する、しないとすることですか?

もう1歩よろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)