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

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

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

Re[4]: 2つのチェックボックス付きTreeView


(過去ログ 107 を表示中)

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

■64042 / inTopicNo.1)  2つのチェックボックス付きTreeView
  
□投稿者/ にゃあ (1回)-(2012/11/06(Tue) 03:56:06)

分類:[.NET 全般] 

C#.NET 2010expressで開発しています。
TreeViewには、チェックボックスを表示する機能が元からありますが、そこにさらにもうひとつチェックボックスを表示して2種類のステータスをON・OFFする、というのが目標です。

TreeViewDrawModeをOwnerDrawTextとして、見た目上はチェックボックスが2つあるものを表示できました。ラベルを表示する場所を少し右にずらし、その空いた所にチェックボックスを表示しました。
ここまできて問題があり、先に進めません。

・クリックの反応する範囲が元のままです。
  MouseDownイベントにて、自力でクリック判定を行うも、元のヒットチェックが残っていて新しいチェックボックスをクリックしたときにラベルクリックのように選択を行なってしまいます。ヒットテスト範囲を適切にしたいです。
  ヒットテストに使用するboundsを変えようとしましたが、編集できない(読み取り専用です、とエラーが出る)のでそこを変える対処ができません。

 元のラベルのヒットチェックを無効にするか変更したいのですが、どのようにすればいいでしょうか?
 また、新しいチェックボックスをクリックするときに選択を一時的に回避するアイデアなどありましたら、お願いします。
引用返信 編集キー/
■64043 / inTopicNo.2)  Re[1]: 2つのチェックボックス付きTreeView
□投稿者/ shu (87回)-(2012/11/06(Tue) 07:30:21)
No64042 (にゃあ さん) に返信

クリックしたポジションでチェックすればなんとかなると思います。
チェックボックスを描画している範囲でクリックされていれば良いのですよね?
描画を行っているのだからどこがその範囲かは分かるかと思います。

引用返信 編集キー/
■64070 / inTopicNo.3)  Re[2]: 2つのチェックボックス付きTreeView
□投稿者/ にゃあ (2回)-(2012/11/06(Tue) 23:42:45)
No64043 (shu さん) に返信

ありがとうございます。

> クリックしたポジションでチェックすればなんとかなると思います。
> チェックボックスを描画している範囲でクリックされていれば良いのですよね?
> 描画を行っているのだからどこがその範囲かは分かるかと思います。

仰る通りです。そのように判定し、新しいチェックボックスもON・OFFできるのです。
しかし、その時に同時に、選択状態になってしまいます。
既存のヒットテストが残っているからです。

追加したチェックボックスのチェックON・OFFだけをするために、既存のヒットテストを無効化あるいは停止などできないでしょうか?

** BeforeSelectイベントにて、選択をキャンセルというのを試してみましたが、表示がちらつきますね。これが限界かなぁ。
引用返信 編集キー/
■64071 / inTopicNo.4)  Re[3]: 2つのチェックボックス付きTreeView
□投稿者/ shu (88回)-(2012/11/06(Tue) 23:53:49)
No64070 (にゃあ さん) に返信

> 既存のヒットテストが残っているからです。
既存の動作による影響であれば既存の状態を使用しないのはどうでしょう?
つまり両方のチェックを独自に状態を持つようにしてOwnerDrawで両方描画するようにするという方法です。
既存の動きを抑制するよりは楽だと思います。
引用返信 編集キー/
■64072 / inTopicNo.5)  Re[4]: 2つのチェックボックス付きTreeView
□投稿者/ にゃあ (3回)-(2012/11/07(Wed) 00:45:32)
No64071 (shu さん) に返信
> 既存の動作による影響であれば既存の状態を使用しないのはどうでしょう?

選択状態を無視するということにすると、やりたい機能の一部を諦めなくてはなりませんので、なんとかしたいと思ったのですが・・・。
そうですね、チェックボックス追加まではできているので、さらにもうひとつチェックボックスを追加して選択状態の代わりにするなど、考慮してみます。

OwnerDrawTextでは表示色や文字の大きさを多少変える程度の事しかできないもの、と納得するしかなさそうですね。
(似た様なことをしようとして、同じ問題にぶつかっている例が。 http://social.msdn.microsoft.com/Forums/ja-JP/netfxgeneralja/thread/d40ad1e6-6563-4c46-b4f3-2922338e6624 )
文字の表示位置をずらすことはできるが、クリック判定の位置はずらせない。
そういうものだとして、仕様の再検討をします。

ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -