- - PR -
ScrollBarのValueChangeを事前にキャッチ
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-12 10:48
WinXP/VB.Netで開発しています。
ScrollBarを動かされたときに画面上の入力値のチェックを行い、OKだったら 画面を動かし、ダメだったらエラーメッセージを出してスクロールをしない、 ということをしたいと思っています。 この入力値チェックをValueChangedイベントでチェックしようと思ったのですが、 イベントに飛んできたときにはすでにスクロールバーの値が変わった後なので、 「エラーメッセージを出して画面を動かさない」というところはできていても 肝心のスクロールバーがすでにスクロールしてしまっています。 一つの案として、スクロールバーの位置を保持するメンバ(SCVal)をクラスに追加して チェックがOKだったら画面を動かしてSCVal = ScrollBarの新しいValueにセットし、 NGだったら画面を動かさず、動いてしまったスクロールバーは ScrollBar.Value = SCVal とかして巻き戻しさせる(無理やりですが)、というのを 思いついたのですがメンバ変数は極力使わないというプロジェクトの方針があり、 却下されてしまいました。 ValueChanged(事後)ではなく、Valueが動こうとするタイミング(BeforeValueChange?) でとれるイベントがあればよいのですが、そういうのもないみたいで困っています。 どなたか良い回避策をご存知でしたら教えてください。 お願いします。 | ||||||||
|
投稿日時: 2005-09-12 11:05
お世話になります。
Private Sub VScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll e.NewValue = Me.VScrollBar1.Value End Sub とかでどうでしょうか。 # ただ、個人的にはスクロールバーを動かしたときに入力チェックって # ユーザビリティ的観点で見ると、どうかなぁ…という気もします… | ||||||||
|
投稿日時: 2005-09-12 11:06
南部です。
Scrollイベントかな。 | ||||||||
|
投稿日時: 2005-09-12 12:58
なおこ(・∀・)さん、nanbuさん、お返事どうもありがとうございます。
ご指摘のとおり、Scrollイベントで拾うことができました。 Scrollイベントの中で Private Sub VScrollBar1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles VScrollBar1.Scroll If Not CheckData() Then e.NewValue = VScrollBar1.Value End If End Sub としておいて、ValueChangedイベントの中で画面の移動のみを制御することで Scrollイベントでチェック→うまくいったらValueChangedイベントで画面を移動 という、思っていたとおりの制御ができるようになりました。 #確かにわたしもスクロールバーを動かしたときにチェックというのは???と #思ったのですが。 #既存システムがそうなっているということなので… どうもありがとうございました。 | ||||||||
|
投稿日時: 2005-09-12 21:26
入力コントロールの Validating イベントで処理する、に一票。これだと入力コントロールからフォーカスが離れるときにチェックされます。
…まさかとは思いますが、スクロールバーの移動でチェック、ボタンをクリックしようとするときにチェックなど、チェックする箇所をたくさん作っていませんよね? _________________ | ||||||||
|
投稿日時: 2005-09-13 09:20
スクロール バーでのチェックはしていると書いてありますよ (w # もちろん、アクセシビリティ、ユーザビリティ的にはよろしくないです。 で、当然スクロール バーを移動せずに、[完了] なんて普通にあるので、 最終チェックしている箇所はあるでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-09-13 11:19
…してます 基本的にあまり「登録」を意識しない仕様なので、どんどん入力すると勝手にどんどん Commitされます。 よって、入力エリアを出た時点でのチェックとかじゃんぬねっとさんのおっしゃる 終了時のチェック(ダメだったら終了させない)もしています。 うぅ。 | ||||||||
|
投稿日時: 2005-09-13 11:23
こんにちは、じゃんぬ です。
すごい仕様ですね... いいのかな... (^-^;)
チェックしているのは、随時 Commit しているからですよね... 悪意のある操作をしたら、サーバが大変なことになりそうなんですが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
