データの登録・更新処理をする際に、確定ボタンを押下後
処理が終わるまでマウスポインターを砂時計にしたいのですが、
コーディングには書いているにもかかわらず、マウスポインターが
矢印のままで砂時計に変わりません・・
なにか、フォームの制御とかあるのでしょうか?
コーディングは
Screen.MousePointer = vbHourglass
データ登録・更新処理
Screen.MousePointer = vbDefault
です。
なにかわかる方、よろしくおねがいします
Screen.MousePointer = vbHourglass
の後にDoEventsを入れてもだめですか?
ねろ様、アドバイスありがとうございます。
「DoEvents」を追加して実行してみましたが、
砂時計には変わりませんでした・・・
ステップ実行をして、
Screen.MousePointer = vbHourglass
の処理を通っていることを確認していた時に、
デスクトップにカーソルを合わせてみたら砂時計になっていました・・
このフォームに何か問題があるのでしょうか?
色々、試しているところです。
何かわかりましたらよろしくお願いします。
どうゆう処理をしているかわかりませんが
処理が早すぎて目に見えないというのは無いですか!?
for文で10万回ループさせましたが視覚的にわかりませんでしたよ。
> Screen.MousePointer = vbHourglass
> の処理を通っていることを確認していた時に、
> デスクトップにカーソルを合わせてみたら砂時計になっていました・・
ということは、[Screen]を作成しているフォームに置き換えれば
フォーム上のカーソルが砂時計になるのでは!?
[フォーム].MousePointer = vbHourglass
でいけました(VB6.0+SP5)
VB6ではフォーム上にマウスカーソルがある時にしかカーソル変更出来なかったような気がします。
うろ覚えなんで正確なことはわからないですけど。
↓のコードで試してみてください。
Option Explicit
Private Sub Command1_Click()
Dim lLp As Long
Screen.MousePointer = vbHourglass
For lLp = 0 To 100000000
Next
Screen.MousePointer = vbDefault
End Sub
フォーム上にカーソルがある場合はScreen.MousePointerで正常に変更できますが、
フォームの外にカーソルがある場合、Screen.MousePointerを通って重たい処理が入った後フォーム上にカーソルを戻してもカーソルは砂時計になりません。
※コマンドボタンはスペースキーで押して下さい。
以下の構文でいけないですかね?
'** マウスポインタを待ち状態(砂時計)に設定
Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
'** マウスポインタを元に戻す
Me.Cursor = System.Windows.Forms.Cursors.Default
(´∀`)つ
たぶん質問者はもう見ていないと思いますが、
一応まとめますと、要するにこれは
Screen.MousePointer = vbHourglass
のコードを実行している時に、マウスポインターは砂時計を
表示したいフォームの上には無く、どこか他にある。
そして次に重い処理が入るのでウィンドウズはマウスポインターを
変えたくても忙しくて処理が回ってこない。
つまりnanashiさんの
Private Sub Command1_Click()
Dim lLp As Long
Screen.MousePointer = vbHourglass
For lLp = 0 To 100000000
Next
Screen.MousePointer = vbDefault
End Sub
これをやっていると言うことですか。
こう言うのは、
Private Sub Command1_Click()
Dim lLp As Long
Screen.MousePointer = 13
For lLp = 0 To 100000000
If lLp Mod 10000 = 0 Then DoEvents
Next
Screen.MousePointer = vbDefault
End Sub
こんな風に時々はウインドウズに処理を戻してあげなさい
と言うことですね。この方が処理を中断したい時も
具合がいいし。