C# 基于在TreeView结构中检查的节点调用特定的UserControl

C# 基于在TreeView结构中检查的节点调用特定的UserControl,c#,winforms,user-controls,eventhandler,treeviewitem,C#,Winforms,User Controls,Eventhandler,Treeviewitem,在我的Windows窗体中,有两个用户控件,一个放在另一个上 我还有一个TreeView结构(TreeView1),它有一个根节点(本身有两个子节点,带有复选框) 基本上,我希望在选中与该用户控件对应的树状视图节点时,只显示一个用户控件 这是我为响应检查事件而编写的代码: private void TreeView1_AfterCheck(object sender, TreeViewEventArgs e) { string Case; Case = e.No

在我的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事件处理程序的实现是不正确的。有人能帮我吗

AfterCheck()在节点未选中时也会激发。…您需要对此进行检查。另外,您是否有防止同时选中两个框的代码?否则,哪一个应该在前面?上次检查的是什么

…如果之前检查过这两个项目,但没有检查,会发生什么情况?用户控件是否应该不可见

这么多问题

这~可能~就是你想要的:

    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();
            }
        }
    }

用户控件没有响应是什么意思
BringToFront()
似乎没有任何效果?它们的某些组件没有响应?UCs是否偶然被禁用?顺便说一句,您只需
切换(e.Node.Name)
UC2.Visible=true看起来没有什么用处,因为UCs是一个接一个的。从某种意义上说,“没有响应”,最顶端的用户控件(UC2)是唯一可见的控件,即使我检查了节点以使UC1可见。根据我设计表单的方式,UC2位于顶部。因此,基本上在运行表单时,它只显示TreeView和UC2,甚至在检查其他节点时也不会改变。如果我在表单的设计中将UC1放在最上面,那么在运行表单时,UC1就会出现,即使选中了另一个框,UC1也会出现。如果用户控件不切换位置或什么都没有发生,那么这里的代码和张贴的闲置思想,然后,您必须检查事件处理程序是否实际连接或名称是否匹配:
Call\u UC1
等。请注意,比较区分大小写。好的,我实际上稍微更改了代码,并使UCs响应选择,而不是检查。而且它似乎工作得很好。该死。我得承认,我没有认真考虑这些问题。我缺乏经验表明…非常感谢你让我注意到这些。是的,也许问题的一部分是我没有考虑“取消勾选”的方面。