- - PR -
Validatingでは
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-08-23 17:25
こんばんは。もう1点お聞きします。
VB2005で、いくつかのテキストボックスを配置し それぞれ入力内容をチェックします(日付であるとか) 入力後、更新ボタンをクリックし内容を更新する訳ですが 問題は、どうエラーの時カーソルを制御するかです。 当然、更新ボタンのCausesValidationはFalseに しておきますが、1度あるテキストボックスに Focusが移ると、もう他のテキストボックスには 移れないという問題があります。 Leaveだと、エラーでも次に移ってしまいますし.. Enterキーを押したときだけ、入力内容をチェックするようにしたりとか みなさんは、どのような方法をとっていますか? ご教授頂けないでしょうか? 宜しくお願いします。 | ||||||||
|
投稿日時: 2007-08-23 17:31
案件次第ではありますが、私のユニットではこのような方法を取っています。
# リンク先が見れない場合は Google のキャッシュを利用してください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-08-23 18:59
じゃんぬねっとさん、ありがとうございます。
なんだかWindowsっぽいですね。 ErrorProvider1.SetErrorでエラー表示はOKなのですが MsgBox(ValidateChildren())を更新ボタンクリック で表示させてもエラー有りでも無しでもTrueが返って来ます。 それともう1点、最終チェック時に ErrorProviderの内容を全て表示させると ありますが、表示方法を 教えて頂けないでしょうか? すいません、宜しくお願いします。 | ||||||||
|
投稿日時: 2007-08-23 19:11
これは、Validating イベント引数 CancelEventArgs の Cancel プロパティを true にしていないからでしょう。
SetError メソッドとは逆で GetError メソッドを使ってエラーを収集しましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 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 で判断させたいのですが どうぞ、宜しくお願いします。 | ||||||||
|
投稿日時: 2007-08-23 19:58
ValidateChildren メソッドでどうしてもやりたいのであれば、ValidateChildren メソッドの場合のみ Cancel = true になるようなフレームワークを考える必要があります。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-08-23 22:23
じゃんぬねっとさん、ありがとうございます。
具体的にはValidateChildrenでもう1度 TextBox1_Validatingイベントが発生するのですが 何かの判断でValidateChildrenからか、通常の入力からか 変数か何かで判断しCancel プロパティを true する、しないとすることですか? もう1歩よろしくお願いします。 | ||||||||
|
投稿日時: 2007-08-23 22:23
じゃんぬねっとさん、ありがとうございます。
具体的にはValidateChildrenでもう1度 TextBox1_Validatingイベントが発生するのですが 何かの判断でValidateChildrenからか、通常の入力からか 変数か何かで判断しCancel プロパティを true する、しないとすることですか? もう1歩よろしくお願いします。 |
1|2|3
次のページへ»