根据TreeView结构中的哪个节点调用特定的UserControl

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据TreeView结构中的哪个节点调用特定的UserControl相关的知识,希望对你有一定的参考价值。

在我的Windows窗体中,有两个用户控件,一个放在另一个上面。

我还有一个TreeView结构(TreeView1),它有一个根节点(本身有两个子节点,带有复选框)。

基本上,我希望在选中与该用户控件对应的树视图节点时,只显示一个用户控件。

这是我为响应检查事件而编写的代码:

private void TreeView1_AfterCheck(object sender, TreeViewEventArgs e)
    {
      string Case;

      Case = e.Node.Name;

      switch (Case)
      {
        case "Call_UC1": //Name of the first node of TreeView Structure
             UC1.BringToFront(); //UC1 - object of the User Control 1
             UC1.Visible = true;
             break;

         case "Call_UC2": //Name of the second node TreeView Structure
             UC2.BringToFront(); //UC2 - object of the User Control 2
             UC2.Visible = true;
             break;

         default:
             break;
       }
    }

问题是,当我检查任一节点的任何复选框时,用户控件没有响应。什么都没发生。我猜测我的TreeView事件处理程序的实现是不正确的。任何人都可以帮我吗?

答案

当节点为UNCHECKED时,AfterCheck()也会触发...你需要检查这个。此外,您是否有适当的代码可以防止同时检查这两个框?否则,哪一个应该在前面?无论上次检查过哪一个?

......如果在检查之后未检查两者,会发生什么? UserControls应该不可见吗?

这么多的问题...

这〜可能就是你所追求的:

    private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
    {
        if (e.Node.Checked)
        {
            if(e.Node.Name == "Call_UC1")
            {
                UC1.Visible = true;
                UC1.BringToFront();
            }
            else if (e.Node.Name == "Call_UC2")
            {
                UC2.Visible = true;
                UC2.BringToFront();
            }
        }
    }

以上是关于根据TreeView结构中的哪个节点调用特定的UserControl的主要内容,如果未能解决你的问题,请参考以下文章

ttk.Treeview

delphi 根据数据库结构生成TreeView

MFC Treeview:如何检查 Treeview 是不是已经包含特定的子节点?

Delphi TreeView 问题

如何包含特定 TreeView 节点的复选框?

如何触发JQuery treeview的渲染