次の方法で共有


TreeView.BeforeCheck イベント

ツリー ノードのチェック ボックスがオンにされる前に発生します。

Public Event BeforeCheck As TreeViewCancelEventHandler
[C#]
public event TreeViewCancelEventHandler BeforeCheck;
[C++]
public: __event TreeViewCancelEventHandler* BeforeCheck;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが、このイベントに関連するデータを含む、TreeViewCancelEventArgs 型の引数を受け取りました。次の TreeViewCancelEventArgs プロパティには、このイベントの固有の情報が記載されます。

プロパティ 説明
Action イベントを発生させた TreeViewAction の種類を取得します。
Cancel (CancelEventArgs から継承されます) イベントをキャンセルするかどうかを示す値を取得または設定します。
Node チェックされる、展開される、折りたたまれる、または選択されるツリー ノードを取得します。

解説

メモ    TreeNode.Checked プロパティを BeforeCheck イベント内または AfterCheck イベント内から設定すると、イベントが複数回発生することになり、予期できない動作を引き起こす可能性があります。たとえば、子ノードを再帰的に更新するときは、イベント ハンドラで Checked プロパティを設定することによって、ユーザーは各ノードを展開してチェックする必要がなくなります。イベントが複数回発生することを防ぐためには、 TreeViewEventArgsAction プロパティが TreeViewAction.Unknown に設定されていない場合に、再帰コードだけを実行するロジックをイベント ハンドラに追加します。

イベント処理の詳細については、「 イベントの利用 」を参照してください。

使用例

[Visual Basic, C#, C++] ユーザーがチェック状態を変更したときに TreeNode のすべての子ツリー ノードを更新する例を次に示します。このコードは、 TreeNodeCollectionTreeNode オブジェクトがある TreeView が配置された Form があることを前提にしています。 TreeNodeCollection は、子ノードを持つツリー ノードを持っている必要があります。

 
' Updates all child tree nodes recursively.
Private Sub CheckAllChildNodes(treeNode As TreeNode, nodeChecked As Boolean)
   Dim node As TreeNode
   For Each node In  treeNode.Nodes 
      node.Checked = nodeChecked
      If node.Nodes.Count > 0 Then
         ' If the current node has child nodes, call the CheckAllChildsNodes method recursively.
         Me.CheckAllChildNodes(node, nodeChecked)
      End If
   Next node
End Sub
      
' NOTE   This code can be added to the BeforeCheck event handler instead of the AfterCheck event.
' After a tree node's Checked property is changed, all its child nodes are updated to the same value.
Private Sub node_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles treeView1.AfterCheck
   ' The code only executes if the user caused the checked state to change.
   If e.Action <> TreeViewAction.Unknown Then 
      If e.Node.Nodes.Count > 0 Then
         ' Calls the CheckAllChildNodes method, passing in the current 
         ' Checked value of the TreeNode whose checked state changed. 
         Me.CheckAllChildNodes(e.Node, e.Node.Checked)
      End If
   End If
End Sub 

[C#] 
// Updates all child tree nodes recursively.
private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
   foreach(TreeNode node in treeNode.Nodes)
   {
      node.Checked = nodeChecked;
      if(node.Nodes.Count > 0)
      {
         // If the current node has child nodes, call the CheckAllChildsNodes method recursively.
         this.CheckAllChildNodes(node, nodeChecked);
      }
   }
}

// NOTE   This code can be added to the BeforeCheck event handler instead of the AfterCheck event.
// After a tree node's Checked property is changed, all its child nodes are updated to the same value.
private void node_AfterCheck(object sender, TreeViewEventArgs e)
{
   // The code only executes if the user caused the checked state to change.
   if(e.Action != TreeViewAction.Unknown)
   {
      if(e.Node.Nodes.Count > 0)
      {
         /* Calls the CheckAllChildNodes method, passing in the current 
         Checked value of the TreeNode whose checked state changed. */
         this.CheckAllChildNodes(e.Node, e.Node.Checked);
      }
   }
}

[C++] 
// Updates all child tree nodes recursively.
private:
void CheckAllChildNodes(TreeNode* treeNode, bool nodeChecked) {
    IEnumerator* myEnum = treeNode->Nodes->GetEnumerator();
    while (myEnum->MoveNext()) {
        TreeNode* node = __try_cast<TreeNode*>(myEnum->Current);

        node->Checked = nodeChecked;
        if (node->Nodes->Count > 0) {
            // If the current node has child nodes, call the CheckAllChildsNodes method recursively.
            this->CheckAllChildNodes(node, nodeChecked);
        }
    }
}

// NOTE   This code can be added to the BeforeCheck event handler instead of the AfterCheck event.
// After a tree node's Checked property is changed, all its child nodes are updated to the same value.
void node_AfterCheck(Object* /*sender*/, TreeViewEventArgs* e) {
    // The code only executes if the user caused the checked state to change.
    if (e->Action != TreeViewAction::Unknown) {
        if (e->Node->Nodes->Count > 0) {
            /* Calls the CheckAllChildNodes method, passing in the current
            Checked value of the TreeNode whose checked state changed. */
            this->CheckAllChildNodes(e->Node, e->Node->Checked);
        }
    }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

TreeView クラス | TreeView メンバ | System.Windows.Forms 名前空間 | CheckBoxes | OnBeforeCheck | AfterCheck | OnAfterCheck