痔になりやすい生活習慣とは?

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

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 …(VS.80).aspx
のヘルプから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クリック時のイベントの拾い方をご存知の方がおられましたらご教授お願いします。

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QTreeView の初期表示について

TreeView に『A』『B』『C』のノードがあるとします。
初期表示を『B』ノードを選択・展開した状態(子ノードあり)にしたいのですが、
方法がわかりません。
何かよい方法はないでしょうか?よろしくお願いします。
説明不足な点はすぐに補います。

Aベストアンサー

'ノードの追加
Call TreeView1.Nodes.Add(, , "a", "A")
Call TreeView1.Nodes.Add("a", tvwChild, "b", "B")
Call TreeView1.Nodes.Add("b", tvwChild, "c", "C")

'ノードの展開
TreeView1.Nodes("a").Expanded = True
TreeView1.Nodes("b").Expanded = True

'ノードの選択
TreeView1.Nodes("b").Selected = True

上のコードで知りたいことはあっていますか?

Qツリービューのノードをダブルクリックしたことを判断させるには

 VBにて、ツリービューのノードをダブルクリックしたときにこうする、というような処理をさせるにはそうすればいいんでしょうか。

 TreeView1_NodeClickというのはありますが、ダブルクリックに関してはDblClickだけしか存在せず、どのノードを選択したかを取得できません。

 どなたか、TreeView1_NodeClickのようにノードをダブルクリックした時に限り、そのノードを取得して処理をさせるというような方法を教えてください。

 よろしくお願いします。

Aベストアンサー

Private ClickedNode As MSComctlLib.Node

Private Sub TreeView1_DblClick()
MsgBox ClickedNode.Text + "がダブルクリックされました"
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
Set ClickedNode = Node
End Sub

NodeClickイベントで、クリックされたノードをセットしておき、ダブルクリックイベントでそれを利用するというのはどうでしょう。

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

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

Aベストアンサー

オンライン ヘルプは見ましたか?
"TreeView.AfterCheck イベント" のヘルプにそのまんまサンプルが掲載されています。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.treeview.aftercheck(VS.80).aspx

Qチェックボックスを操作できないようにしたいです VB.NET

チェックボックスのCheckedの状態をユーザーによるクリックや
スペースキーの押下で変更出来ないようにしたいです。
Checked_Changeイベントでユーザーによって変更されたのか
プログラムで変更されたのか判断してユーザーによる変更の場合は
チェックの状態をクリック前の状態に戻して、
Checked_Changeイベントを抜け出したいのですが
どのような方法でやればよいでしょうか?

ご教授頂けると幸いです。よろしくお願いいたします。

Aベストアンサー

WindowsFormアプリでしょうか ・・・ 開発(実行)環境の明示をしましょう

KeyPressやMousDownなどでフラグをセット
CheckedChangedイベントでフラグを参照して修正する方向かと ・・・

フォームクラスの変数として
Dim bCheck, bFlag as Boolean
を宣言

FromのLoadイベントなどで
bCheck = CheckBox1.Checked
bFlag = False
と初期化しておきます

CheckBoxのCheckedChangedイベントで
if bFlag then
  ' フラグが立っているときは元のデータに戻す
  bFlag = False
  CheckBox1.Checked = bCheck
end if

CheckBoxのMouseDownイベントに
' ボタンの判断をするのであれば e.Buttonを使って判断します
bFlag = True

CheckBoxのKeyPressイベントに
if e.KeyChar = Chr(32) then
  bFlag = True
end if

といった具合でしょう ・・・

WindowsFormアプリでしょうか ・・・ 開発(実行)環境の明示をしましょう

KeyPressやMousDownなどでフラグをセット
CheckedChangedイベントでフラグを参照して修正する方向かと ・・・

フォームクラスの変数として
Dim bCheck, bFlag as Boolean
を宣言

FromのLoadイベントなどで
bCheck = CheckBox1.Checked
bFlag = False
と初期化しておきます

CheckBoxのCheckedChangedイベントで
if bFlag then
  ' フラグが立っているときは元のデータに戻す
  bFlag = False
  CheckBox1.Checke...続きを読む


人気Q&Aランキング