- PR -

VB2005 マウスカーソルについて

1
投稿者投稿内容
のぶ
会議室デビュー日: 2009/02/12
投稿数: 5
投稿日時: 2009-02-12 11:17
ボタンを押した後、マウスカーソルを砂時計にしようと試みていますが
フォームの一部で砂時計にならないエリアがあります。

<記述は下記の通り>
Me.Cursor = Cursors.WaitCursor

処理を行っている間、フォームを問わず、マウスカーソルを砂時計にするには
どのように記述すればよろしいでしょうか?
ご教授よろしくお願い致します。

ちなみに下名はVB2005初心者で、他人が書いたプログラムを修正しています。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-12 11:37
> フォームの一部で砂時計にならないエリアがあります。
具体的にどこですか?

> フォームを問わず
フォーム上の場所を問わず、ではなくですか?
複数のフォームがあるのでしょうか?
のぶ
会議室デビュー日: 2009/02/12
投稿数: 5
投稿日時: 2009-02-12 12:02
Kingさん回答ありがとうございます。

フォームは下記構成となっております。
(1)画面切替え用のボタンが約10個配置
(2)画面中央にタブコントロール(タブ数5つ)
(3)タブコントロールの中にパネルコントロールが配置
 パネルコントロールの上にテキストやラベルが配置

画面切替え用ボタンの上では、全て砂時計がデフォルトに戻ってしまいます。
タブコントロール上のパネルでは、砂時計状態のものと、デフォルトのものが存在します。

『フォームを問わず』と記述しましたのは、フォームの上にあるコントロールで
砂時計になる、ならない等 条件の切り分けがつかないものでしたので
条件を問わず、砂時計にしたいという意味で記述しています。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-12 12:57
仰る通りのフォームを作成し、「画面切替え用のボタン」の Click のタイミングで
> Me.Cursor = Cursors.WaitCursor
としたところ、砂時計にならないのはパネルコントロールの上の TextBox だけでした。
その TextBox も
[TextBoxのID].Cursor = Cursors.WaitCursor
とすると砂時計になりました。
コントロールの Controls プロパティに含まれるコントロールの Cursor プロパティを
再帰的に変更する関数などで対応してはどうでしょうか。
のぶ
会議室デビュー日: 2009/02/12
投稿数: 5
投稿日時: 2009-02-12 14:25
KINGさん回答どうもありがとうございました。

ControlsプロパティにてFormに乗っているコントロールのCursorプロパティを
明示的にWaitCursorに置き換えるということですね。

システム全体を通してのCursorプロパティ指定はないものですかね・・
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-12 14:42
コード:

Private Sub ChangeCursorsType(ByVal target As Control, ByVal isWait As Boolean)
    ' 対象コントロールのカーソル設定
    If isWait Then
        target.Cursor = Cursors.WaitCursor
    Else
        target.Cursor = GetOriginalCursorType(target)
    End If

    ' 下位コントロールでループ
    For Each child As Control In target.Controls
        ChangeCursorsType(child, isWait)
    Next
End Sub

Private Function GetOriginalCursorType(ByVal target As Control) As Cursor
    ' 他にあるなら追加
    Select Case target.GetType.FullName
        Case GetType(TextBox).FullName
            Return Cursors.IBeam
        Case Else
            Return Cursors.Default
    End Select
End Function


ボタンをクリックした時に上記の関数を

ChangeCursorsType(Me, True)

って呼び出せば出来ました。

> システム全体を通してのCursorプロパティ指定はないものですかね・・

私が知らないだけで簡単に出来る方法がありそうですよね。
のぶ
会議室デビュー日: 2009/02/12
投稿数: 5
投稿日時: 2009-02-12 15:32
記述頂いたプログラムを組みこんで動きを確認してみました。
作りたかった動き通りです。助かりました。

KINGさん、どうもありがとうございました。
1

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