C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: TREEVIEWクリック位置が「+」か「ノード」を判定したい


(過去ログ 36 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■18212 / inTopicNo.1)  TREEVIEWクリック位置が「+」か「ノード」を判定したい
  
□投稿者/ もんきっき (33回)-(2008/05/11(Sun) 09:48:52)

分類:[VB.NET/VB2005] 

2008/05/11(Sun) 09:55:06 編集(投稿者)
2008/05/11(Sun) 09:53:55 編集(投稿者)

いろいろ試行錯誤してみたのですが、
良い方法がみつかりませんでしたので、ご教授御願いいたします。
■質問
TREEVIEWをクリックした位置が「+」か「ノード」を
マウスボタンを押してから上げるまでの間に判定したい

■何をしたいか
ノードが選択状態になるタイミングを変えたい

1.MouseDown (マウスを押したとき)
   ←ここで選択状態にしたいので選択するコードを記述した
2.Click (マウスをあげたとき)
   ←デフォルトではここで選択状態になる
    ※選択中のノード以下の場合は別
    ※BeforeExpandイベントもここ
3.MouseClick
4.MouseUp


■現在の問題点
+-クリックでもノードが選択されてしまい 
ノードを開閉したいだけのときにも選択状態になってしまう
BeforeExpandで判定しようと思ったけどタイミングが違い無理でした
引用返信 編集キー/
■18218 / inTopicNo.2)  Re[1]: TREEVIEWクリック位置が「+」か「ノード」を判定したい
□投稿者/ よねKEN (6回)-(2008/05/11(Sun) 11:24:26)
> ■何をしたいか
> ノードが選択状態になるタイミングを変えたい
> 
> 1.MouseDown (マウスを押したとき)
>    ←ここで選択状態にしたいので選択するコードを記述した

ここでどのように記述していますか?
TreeViewのHitTestメソッドでマウス位置の状況を調べて、
戻り値のTreeViewHitTestInfoのLocationプロパティ( TreeViewHitTestLocations列挙体)
で判断してはどうでしょうか。
↓のようなイメージ(掲示板上で直接コードもどきを書いてますので、あくまで参考までに)

Dim info As TreeViewHitTestInfo = DirectCast(sender, TreeView).HitTest(e.Location)
If info .Location <> TreeViewHitTestLocations.PlusMinus Then
   ' 選択の処理
End If

引用返信 編集キー/
■18228 / inTopicNo.3)  Re[2]: TREEVIEWクリック位置が「+」か「ノード」を判定したい
□投稿者/ もんきっき (34回)-(2008/05/11(Sun) 12:32:31)
2008/05/11(Sun) 12:32:46 編集(投稿者)

>よねKENさま

このコードでやりたいことが実現できました。


    Dim tv As TreeView = DirectCast(sender, TreeView)
    Dim returnValue As TreeViewHitTestInfo
returnValue = tv.HitTest(New Point(e.X, e.Y))
Select Case returnValue.Location
Case TreeViewHitTestLocations.Label
tv.SelectedNode = returnValue.Node
End Select

ちなみに、これまで書いていた記述はこれです
    Dim tv As TreeView = DirectCast(sender, TreeView)
Dim k_Node As TreeNode = tv.GetNodeAt(New Point(e.X, e.Y))
If k_Node Is Nothing Then
Else
tv.SelectedNode = k_Node
End If


MSDNの調べ方をもっと勉強します
適切なご教授本当にありがとうございました

解決済み
引用返信 編集キー/
■18232 / inTopicNo.4)  Re[3]: TREEVIEWクリック位置が「+」か「ノード」を判定したい
□投稿者/ よねKEN (7回)-(2008/05/11(Sun) 15:23:48)
お役に立てたようで何よりです。
余談ですが、個人的なアプリ作成で、何年かぶりにTreeViewを昨日から使ってまして、
ちょうどたまたまTreeViewHitTestInfoを見つけたところだったのでタイムリーでした。

> ちなみに、これまで書いていた記述はこれです
>     Dim tv As TreeView = DirectCast(sender, TreeView)
> Dim k_Node As TreeNode = tv.GetNodeAt(New Point(e.X, e.Y))
> If k_Node Is Nothing Then
> Else
> tv.SelectedNode = k_Node
> End If

先ほどのコメントを書いた後に、HitTest使わなくてもGetNodeAtでできるんじゃ?と思ったところだったのですが、
そちらだと+/-でも反応するんですね。勉強になります。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -