重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

はじめまして。
以下の環境で開発しています。

Visual studio 2005 Version 8.0.50727.867 (vsvista.050727-8600)
.NET Framework Version 2.0.50727 SP2
Visual Basic 2005


TreeView(二階層限定)にCheckBoxを表示させて親ノードのCheckBoxをTrue/Falseすると
その子ノードのCheckBoxも全部合わせてTrue/Falseするものを作ろうとしていますが、
CheckBoxクリック時のイベントが拾えません。
どなたかご存知の方がおられましたらご教授ください。

通常のCheckBoxであればPostBackが発生するのですが、TreeViewのCheckBoxにはそのような
イベントがありません。
TreeNodeCheckChangedイベントはあるのですが、True/Falseが切り替わったあとにTreeView
のラベル選択したときに発生する中途半端なイベントなので使えません。

http://msdn.microsoft.com/ja-jp/library/system.w …
のヘルプからAfterCheckイベントを調べて試したのですが、
Imports System.Windows.Forms
Public Event AfterCheck As TreeViewEventHandler
を定義して、以下の関数を書いてみたのですが、

Private Sub node_AfterCheck(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles TreeView1.AfterCheck
~中身~
End Sub

「イベントAfterCheckが見つかりません。」とコンパイルエラーとなります。

客先の開発環境なのでバージョンアップ等はできません。
どなたかCheckBoxクリック時のイベントの拾い方をご存知の方がおられましたらご教授お願いします。

A 回答 (2件)

No.1のsean9です。


ちゃんと読んでいればWebコントロールだとわかりますね・・・早とちりしてすみません。
では本題に。


以下のjavascriptでどうでしょう。
TreeView1_TreeNodeCheckChanged内で子ノードのチェック処理します。



<script type="text/javascript">
function fire() {
var element = window.event.srcElement;
var id = event.srcElement.id;
id = id.replace("TreeView1t", "TreeView1n");
id = id.replace("CheckBox", "");
var ch = document.getElementById(id);
if (ch != null && element.tagName == "INPUT" && element.type == "checkbox") {
__doPostBack("", "");
}
}
</script>


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>

</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All">
<Nodes>
<asp:TreeNode Text="node1" >
<asp:TreeNode Text="childNode1" />
<asp:TreeNode Text="childNode2" />

</asp:TreeNode>

</Nodes>
</asp:TreeView>
</div>
</form>
<script type="text/javascript">
if (document.all) {
document.getElementById('TreeView1').onclick = fire;
}
</script>
</body>
</html>
    • good
    • 0
この回答へのお礼

sean9様
ありがとうございます!

早速試したところ、無事postbackされました!
これで子ノードにチェックを入れる以外の動きもできそうです。
助かりました!!

お礼日時:2013/01/17 19:55

こんにちは。

普段C#ばかりでVisualBasicで書いたことがないので、書き方が的確ではないかも知れませんが大目に見てください。

TreeViewのAfterCheckを使います。

(1)イベントハンドラの追加
AddHandler TreeView1.AfterCheck, AddressOf TreeView1_AfterCheck

(2)イベントハンドラでの処理
Private Sub TreeView1_AfterCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs)

Dim treeNode As TreeNode
treeNode = e.Node

If e.Action <> TreeViewAction.Unknown Then
Dim activeNode As TreeNode
activeNode = e.Node

For Each node As TreeNode In activeNode.Nodes
node.Checked = activeNode.Checked
Next
End If
End Sub



こういうことでしょうか。
    • good
    • 0
この回答へのお礼

sean9様
ご回答ありがとうございます。

FormではAfterCheckイベントハンドラを追加できるようなのですが、今やろうとしているWebのコントロールにはAfterCheckイベントがありませんでした。

試してみたのですがやはり構文エラーとなりました…
WebコントロールでAfterCheckができないかな~と思っています。

質問の方にWebコントロールと書いていなくて申し訳ありませんm(_ _)m

お礼日時:2013/01/16 15:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A