2017-09-25 7 views
1

フォームに注意してください:この記事でWindowsでツールバーボタンのカーソルを変更すると、

を私は時代遅れToolBarButtonを参照していないToolStripButton

私は、特定のUI要素のヘルプを表示するためのヘルプモードに入ることができるヘルプ機能を実装しています。そのようなヘルプが付いている要素の上にカーソルを移動すると、カーソルはCursors.Helpに変わります。それはプロパティがないため、ほとんどの要素でうまく動作しますが、ToolBarButtonでは動作しません。

私がこれまでにしてやっているもの:

Private Sub EnterHelpMode() 
    helpMode = True 
    toolBar.Cursor = Cursor.Help 
    ' ... other help-related stuff 
End Sub 

残念ながらそれは、アイコンを助ける全体ToolBarを与えます。 ToolBarButtonの場合にのみ、同じ動作を達成するにはどうすればよいですか?私もToolBarMouseEnterイベントで試してみましたが、ButtonClickイベントとは異なり、これは私にToolBarButtonClickEventArgsという引数を与えませんでした。したがって、ToolBarButtonのどれがホバリングされたのか判断できません。 ToolBarButtonButtonClickとなります)。事前HelpModeを使用するように変更

+1

これは正しい方法ではなく、標準的な方法ではありません。キャプチャプロパティがキーです。ヘルプボタンをクリックすると、* true *に設定されます。 Cursor.Currentを完全に制御でき、すべてのMouseMoveイベントを取得できます。ヒットテストを実行して、どのコントロールやツールストリップ項目がホバリングされているかを確認し、それに応じてCursor.Currentを変更します。 MouseDownを取得すると、ヘルプモードを停止し、関連トピックを表示します。 –

+0

ありがとう、私はその仕事をすることができるかどうかわかります –

+0

@HansPassant 'ToolBarButton'でヒットテストを行うことができません。これは' ClientRectangle'メソッドがないためです。どのようにそれを行うための任意の提案? –

答えて

0

ありがとう:

Dim HelpMode as Boolean = False ' a global variable 

Private Sub tsButton_Click(sender As Object, e As EventArgs) Handles tsbUpdte.Click 
    HelpMode = True 
    Me.Cursor = Cursors.Cross 
End Sub 


Private Sub HelpForControls_MouseDown(sender As Object, e As EventArgs) Handles tsButton1.MouseDown, tsButton2.MouseDown 
    If HelpMode = True Then 
     Me.Cursor = Cursors.Default 
     Dim oName as String = CType(Sender, ToolStripButton).Name ' this works only for ToolStripButtons   
     Call ShowHelp(oName) ' show some help content using a dedicated sub 
     HelpMode = False 
     Exit Sub ' terminate function 
    End If 
End Sub 

Private Sub ShowHelp(StrName as String) 
    SELECT CASE StrName 
     Case "BtnEdit" : MsgBox("This button will allow you to edit selected record.") 
     Case "BtnDelete" : MsgBox("This button will allow you to delete selected record.") 
    End Select 
End Sub 

あなたはおそらくもMe.Captureを使用して、(コメントで提案されているように)上でクリックされている情報を確認し、私は経験がないことができますこのプロパティ。

+0

私は 'ToolBarButton'について話しています。多分私はちょうど方法を知らないのですが、私はMouseEnter(私はすでにそれを試してみました)を聞かせて、私は彼らのカーソルを変更できないと言ったように –

+0

はい、示唆したように、HelpModeを使用する必要があります。私は私の答えを変更します、うまくいけば、あなたを導くのに役立ちます... –

+0

あなたのオブジェクトは 'tsButton1'ですか? –

関連する問題