• 締切済み

チェックボックス付きツリービュー

お世話になっております。 WINAPIにて、チェックボックスつきのツリービューを作っているのですがした処理が出来なくて困っております。(環境:BCC) わかる方がおられれば答えてもらえないでしょうか? 親アイテムにチェックが付いたとき、子アイテム全てにチェックがつく。(Exceの日付フィルタと同じ動作) 子ウィンドウのチェックが一個でもはずれると親ウィンドウのチェックが■とかになるようにするにはどのようにすれば出来るのでしょうか? (全部はずれると、親のチェックもはずれる) 下記サイトを参照した限りではツリービュー自体はそんな処理はしてくれなさそうなのですが。 サブクラス化とかして、チェックイベント拾って、子ウィンドウにもチェックいれるとかの処理を自作しないといけないのでしょうか? http://yokohama.cool.ne.jp/chokuto/urawaza/api/index.html

みんなの回答

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

チェックボックスの状態が変わったりすると、親ウィンドウに TVN_ITEMCHANGEDやTVN_ITEMCHANGINGが飛んできます。 そのメッセージを契機にHTREEITEMから、 TreeView_GetCheckState()で該当のアイテムのチェックボックスの状態が取得できます。(NMTVITEMCHANGE構造体のuStateNewからも取れると思いますが) さらに、TreeView_GetChild()で子が、TreeView_GetParent()で親が、TreeView_GetNextSibling()/TreeView_GetPrevSibling()で兄姉が取得できますので、 順次チェックボックスの状態の取得やTreeView_SetCheckState()/TreeView_SetItemState()でチェックボックスの設定が可能かと思います。 TreeView_SetItemState()のstateでINDEXTOSTATEIMAGEMASK()を使うことでチェックボックスのグレー表示なども可能かと。 # ListViewはそこそこ触ったことありますが、TreeViewはあまりさわったことないので、詳しい処理内容はちょっと… # 検索時のキーワードにくらいはなるでしょうか。

nyororo-n
質問者

お礼

回答ありがとうございます、ちょっと頑張ってみようと思います。

関連するQ&A

  • ASP.NETのチェックボックスつきツリービュー

    開発環境 ・WindowsXP ・Framework4.0 ・VB.NET ASP.NETのWebアプリで、親ノードをチェックすると子ノードもチェックされる ツリービューを作成したいと思っています。 通常のチェックボックスのようにAutoPostBackプロパティをTrueにして 選択イベントハンドラの設定をして実現しようとしていたのですが、 ツリービューはAutoPostBackプロパティを公開していないため、困っています。 良い方法があれば、ご回答よろしくお願いいたします。

  • VisualBasic.net(2008) ツリービュー チェック

    VisualBasic.net(2008)のツリービューのチェックボックスについて質問させていただきます。 ツリービューのチェックボックスをクリックしたときにそのクリックした親ノードの下にある子ノードも連動してチェックを付けたいのですが 自分なりググってみたんですがVisualBasic.net(2008)となると2005と2003のプロパティやらなんやらが変わってしまうので結局できませんでした。

  • ツリービューについて

    いつも参考にしています。 今回初めてVBで開発することになりました。 ツリービューの部分で詰ってしまいました。 【内容1】 2階層のツリーで下位階層(子)が選択されているときだけ実行したい処理があります。 現在選択しているノードが上位階層(親)か下位階層(子)か判断できるような関数などあるのでしょうか? 【内容2】 現在、画面上のツリービュー表示項目をダブルクリックすると値を更新できてしまうのですが、更新不可にできないでしょうか? どちらも初歩的なことなのかも知れませんが、検索しても分からなかったんです。 どうぞアドバイスお願いします。 VBは6.0です。

  • ツリービューのチェックボックスを中間状態にしたい

    開発環境 C# Microsoft Visual Studio 2003/.NET Framework 1.1 TreeViewイメージ □大分類A   □小分類1   □小分類2   □小分類3 □大分類B   □小分類1   □小分類2   □小分類3 □大分類C   □小分類1 上記の状態で、 小分類に全てチェックがある場合は大分類にチェックをつける 小分類に全てチェックがない場合は大分類のチェックを外す 小分類にチェックがある状態とない状態が混ざっていたら 中間状態にする という処理をしたいのですが Framework 1.1で可能でしょうか? ツリービューのチェックのCheckStateが取れればいいのですが Checkedしかないようなので・・・

  • C# ツリービューの使い方

    現在、Microsoft Visual C# 2008 Express Editionでプログラムを作成しているのですが、ツリービューの使い方がよくわかりません。 具体的には、ツリービューとリストビューを左右に並べて、ツリービューのノードをクリックしたときに、その子ノードをリストビューに表示したいと考えています。 そこで、 ツリービューのNodeMouseClickイベントで foreach ( TreeNode child in this.treeView1.SelectedNode.ChildNodes ) { //リストにノードを表示する } と記述したのですが、 「'System.Windows.Forms.TreeNode' に 'ChildNodes' の定義が含まれておらず、型 'System.Windows.Forms.TreeNode' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」 というエラーが発生しました。 これを解決するにはどうすればいいのでしょうか?また、私が実装しようと考えている機能を、ツリービューとリストビューを併用した方法以外でより効率的にかけたりしますか? C#に詳しい人、回答よろしくお願いします。

  • ポップアップメニューのチェックマークについて

    ポップアップメニューのチェックマークを表示させたいのですが どうすればいいのでしょうか? このサイト http://yokohama.cool.ne.jp/chokuto/urawaza/struct/MENUITEMINFO.html を見て、「fMask」に「MIIM_CHECKMARKS」を入れるなど、色々試したのですが 表示されませんでした。 何にどれを入れると出来るのでしょうか? 開発環境:Visual Studio 2005 言語:C又はC++ でお願いします。

  • ACCESS ツリービューの作り方

    お願いします。 ACCESS2003で、ツリービューを作りたいですが、なかなかうまくいきません。 「T部屋マスタ」というテーブルの「部屋名」フィールドを親、 「Q商品マスタ」というクエリの「プラン名」フィールドを子として設定し、 子をクリックすると、その詳細が表示される「F商品マスタ」フォームを起動させたいです。 「T部屋マスタ」には、「部屋名」「部屋コード」というフィールド、 「Q商品マスタ」には、フィールドがたくさんあるので、関係のありそうなものだと「商品コード」「プラン名」あたりかとおもいます。 初心者ですみません…。 この情報だけでわかるか心配ですが、 ご回答お願いします!

  • チェックボックスの入力チェックとデータの転送について

    質問させてください. ちょっとわかりにくいかもしれないのですが、 ・親ウィンドウ(A.html)と子ウィンドウ(B.html)があります。 ・子ウィンドウではチェックボックスを使って選択するページです。チェックは複数選択するときもあります。 ・チェックをつけたチェックボックスの”value”を親ウィンドウのセル(td id=ma1)に表示させる。 ということをやりたいと思っています。 その場合に、 まず、子ウィンドウで、チェックボックスがチェックされているか確認するScriptは、チェックボックスの数だけつくって、チェックされていたらひとつづつ親ウィンドウのセルに表示させていくのがいいのでしょうか? また、二つ目のvalueの情報を、違うセル(td id=ma2)に表示させる場合はどうすればいいのでしょうか? もし、もっと違う効率的なやり方があったら教えていただきたいと思い質問させていただきました。

  • Outlook Express のツリー状表示

    Windows98 LaVieNX を使っています。 Outlook Expressの受信トレイ、送信済みアイテムのビューのことなのですが、ツリー状というのでしょうか、日時の左側にプラスのマークがあり、それを開くと同じ件名入ってきた受信日時の異なるメールがひとまとめになっています。最新のメールが一番下のツリーを開き、そのまた一番下までたどらないと読めない状況です。 このビューではなく”日にち降順”で表示したいのですが、どうすれば良いかわかりません。専門用語などもわからないので、簡単な説明で教えていただければ嬉しいです。 ちょっと分かりにくい質問だと思いますが、どうぞよろしくお願いします。

  • チェックボックスのキーダウン時に矢印キーを検知する方法について

    チェックボックスのキーダウン時に矢印キーを検知する方法について VB6のチェックボックスについて質問させて頂きます。 環境   Windows 2000 SP4   Visual Basic 6.0(SP6) チェックボックスのキーダウン時に矢印キーを検知する方法について、ご存知の方がいらっしゃいましたら、ぜひ教えて頂きたいです。 自分なりに調べてみた結果は以下の通りです。 チェックボックスのKeyDownイベントでは矢印キーは検知できませんでした。 次に試したのが、サブクラス化を行い、WM_KEYDOWNを取得する方法です。 正直、サブクラス化を行えば矢印キーを確実に検知できると考えていたのですが、なぜか矢印キーを押してもWM_KEYDOWNメッセージを取得できず、このため矢印キーの検知ができませんでした。 矢印キー以外のキー、例えばAやSなどは問題なく検知できました。 ちなみに、この状態でSpy++を起動し、矢印キーを押したときのメッセージを確認してみると、チェックボックスウィンドウはきちんとWM_KEYDOWNを受け取っていました。 それなのにサブクラス化した方ではWM_KEYDOWNは取得できません。 まだ完全にサブクラス化の概念を理解している訳ではないため、恐らく何か原因があるのでしょうが、想像ができないでいます。 ( Windowsから送られるメッセージがチェックボックスウィンドウに届くまでの間に誰がメッセージを処理してるのかが分かりません。自分は間に何もないと考えていました )。 この動作についても知っている方がいたら、説明して頂けるととても助かります。 すいませんが、ご教授お願い致します。

専門家に質問してみよう