tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルマウスカーソルからツールバーのボタン取得
記事No3481
投稿日: 2006/04/10(Mon) 12:04
投稿者ひろ
[OSのVer]:WindowsXp    [VBのVer]:VB.NET2003

フォームにツールバーを配置して複数のボタンを追加しました。
フォームにステータスバーを配置しました。
実行中、マウスカーソルがツールバーのボタン上にある時、
そのボタンの簡単な説明をスタータスバーに表示したいのですが、実現方法がわかりません。

MouseHoverイベントを使えばよいのかと思ったのですが、
ボタンのインデックスが取得できないどころか、
ボタンが無い部分にマウスカーソルが移動してもイベントが発生します。

どのような方法をとればよいでしょうか?

Private Sub Form1_Load(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles MyBase.Load
    With Me.ToolBar1.Buttons
        .Add(New ToolBarButton("aaa"))
        .Add(New ToolBarButton("bbb"))
        .Add(New ToolBarButton("ccc"))
    End With

    With Me.StatusBar1
        .Text = ""
        .SizingGrip = False
        .ShowPanels = True
        .Panels.Add("")
        .Panels(0).Width = Me.Width
    End With
End Sub

Private Sub ToolBar1_MouseHover(ByVal sender As Object, _
                                ByVal e As System.EventArgs) Handles ToolBar1.MouseHover
    'aaaボタンだったら
    Me.StatusBar1.Panels(0).Text = "aaaボタンです"
    'bbbボタンだったら
    Me.StatusBar1.Panels(0).Text = "bbbボタンです"
    'cccボタンだったら
    Me.StatusBar1.Panels(0).Text = "cccボタンです"
End Sub

[ツリー表示へ]
タイトルRe: マウスカーソルからツールバーのボタン取得
記事No3482
投稿日: 2006/04/10(Mon) 13:15
投稿者ひろ
hhttp://hongliang.seesaa.net/article/7803763.html
hhttp://d.hatena.ne.jp/santamarta/20041128

この辺の技術を使わないと実現できないんでしょうか。

[ツリー表示へ]
タイトルRe^2: マウスカーソルからツールバーのボタン取得
記事No3483
投稿日: 2006/04/11(Tue) 14:17
投稿者ひろ
自分で書き込んだURLの技術はよく理解できなかったので参考にさせてもらって作ってみました。

Private Sub Form1_Load(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles MyBase.Load

    With Me.ToolBar1.Buttons
        .Add(New ToolBarButton("aaa"))
        .Add(New ToolBarButton("bbb"))
        .Add(New ToolBarButton("ccc"))
        .Add(New ToolBarButton("ddd"))
        .Add(New ToolBarButton("eee"))
    End With

    With Me.StatusBar1
        .ShowPanels = True
        .SizingGrip = False
        .Panels.Add("")
        .Panels(0).Width = Me.Width
    End With
End Sub

Private Function GetButton(ByRef tb As ToolBar, _
                           ByVal X As Integer, _
                           ByVal Y As Integer) As ToolBarButton

    For Each Idx As ToolBarButton In tb.Buttons
        If X > Idx.Rectangle.X AndAlso _
           X < Idx.Rectangle.X + Idx.Rectangle.Width AndAlso _
           Y > Idx.Rectangle.Y AndAlso _
           Y < Idx.Rectangle.Y + Idx.Rectangle.Height Then
            Return Idx
        End If
    Next

    Return Nothing

End Function

Private Sub ToolBar1_MouseMove(ByVal sender As Object, _
                               ByVal e As MouseEventArgs) Handles ToolBar1.MouseMove

    If IsNothing(GetButton(Me.ToolBar1, e.X, e.Y)) = True Then
        Me.StatusBar1.Panels(0).Text = ""
    Else
        Me.StatusBar1.Panels(0).Text = GetButton(Me.ToolBar1, e.X, e.Y).Text
    End If

End Sub

こんな感じで自分のやりたかった事は実現できたのですが、
こんな方法もあるとか、この方法はよくない等の意見があれば教えてもらえないでしょうか。

[ツリー表示へ]