- - PR -
VB.NETのTreeView使用時MouseHoverイベントについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-15 11:02
いつも参考にさせていただいてます。
自ら投稿するのは始めてですが、過去ログを探してもみつからなかったので 投稿することにしました。 環境は以下のとおりです。 ・VB.NET ・Windowsアプリケーション 実現したいことは以下のとおりです。 ・エクスプローラの左側のように階層的にデータを表示する ・エクスプローラのファイルやディレクトリコピーのようにドラッグ&ドロップでデータを移動する ・階層的の表示されているデータをマウスオーバーするとそのデータに関する情報が表示される 実現したいことの一番目と二番目はTreeViewを使用して実現できたのですが、 三番目の実現方法がわかりません。 MouseHoverを使用してもTreeViewの上という情報は取得できるのですが、 どのノードの上という情報が取得する方法がわかりません。 そもそもエクスプローラの左側ではマウスオーバー時にメッセージは表示されないので もしかしてTreeViewを使用してはできないのかなとも思っています。 知りたいことは以下のとおりです。 ・TreeViewを使用して実現したいことの三番目は本当に実現できるのか? ・できるのであればその方法 ・できないのであれば、実現したいことのすべてを実現する方法があるのか? 以上です。 わかりにくい説明かと思いますが、よろしくお願いいたします。 | ||||
|
投稿日時: 2006-02-15 11:10
GetNodeAt メソッドを使用してください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-15 11:12
実際に試したわけではないので、可能かどうかはわかりませんが。
TreeViewコントロールにはGetNodeAtという座標からノードを割り出すメソッドがあるようです。 MouseHoverイベント内でマウス座標を取得し、GetNodeAtで割り出すとうまくいきそうな気がします。 ただし、座標はデスクトップを基準としているものか、ウィンドウを基準としているものか、コントロール基準かによって変わってくるのでご注意を。 _________________ by うちうせん | ||||
|
投稿日時: 2006-02-15 11:22
しゅうさん、じゃんぬねっとさんすばやい返信ありがとうございます。
GetNodeAtメソッドのパラメータに座標を渡さなくてはいけないですが、 MouseHoverイベントでわたされるEventArgs型の引数から座標を取得する方法が わかりません。 基本的な質問で申し訳ありませんがよろしくお願いします。 | ||||
|
投稿日時: 2006-02-15 11:49
イベント引数に拘る必要はないですね。 ヒントは、System.Windows.Forms.Cursor クラス。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-15 11:53
MouseHoverイベント内で座標をとるためには、TreeViewのMousePositionプロパティを参照してください。ただし、画面座標なのでGetNodeAtで使うためにはTreeViewのPointToClientメソッドで座標変換します。 一つ思ったのですが、MouseHoverイベントにするとTreeViewコントロール上にマウスが乗った瞬間1度しかイベントが起きません。なので乗った瞬間にノード上でなければ取得できないようです。 この場合は、MouseMoveイベントを使う方がいいのでは?と思います。 MouseMoveイベントだとeから座標も取得できます。 マウスボタンを押しているかどうかもeから取得できるので、その辺で条件分岐させる必要はありますが。 _________________ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ しゅう ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ [ メッセージ編集済み 編集者: しゅう 編集日時 2006-02-15 11:55 ] [ メッセージ編集済み 編集者: しゅう 編集日時 2006-02-15 11:58 ] | ||||
|
投稿日時: 2006-02-15 12:07
検索してみたら、あった... orz
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5674&forum=7 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-15 16:33
じゃんぬねっとさん しゅうさん何度もありがとうございます。
しゅうさんのおっしゃるとおりMouseHoverではイベントが一度しかとれなかったので 悩んでいたとこでした。ありがとうございます。 じゃんぬねっとさん、過去ログ探していただいてすみません。 そのとおりだとなかなかうまくいかなくて少し悩んでいました。 デバッグで進めるとToolTip.ActiveをTrueにするところを通っているのですが、 実際にToolTipが表示されなくて悩んでいました。 参考のソースだとToolTip.ActiveをFalseにしてから SetToolTip()とToolTip.ActiveをTrueにしてましたが、 ToolTip.ActiveをTrueにする場合はToolTip.ActiveをFalseにする ルートを通らないようにし ToolTipを表示しない場合のみToolTip.ActiveをFalseに設定するように しました。 例とは異なるので少し不安ですが、とりあえずうまくいきました。 ありがとうございました。 |