C# 基于在TreeView结构中检查的节点调用特定的UserControl
在我的Windows窗体中,有两个用户控件,一个放在另一个上 我还有一个TreeView结构(TreeView1),它有一个根节点(本身有两个子节点,带有复选框) 基本上,我希望在选中与该用户控件对应的树状视图节点时,只显示一个用户控件 这是我为响应检查事件而编写的代码: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
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响应选择,而不是检查。而且它似乎工作得很好。该死。我得承认,我没有认真考虑这些问题。我缺乏经验表明…非常感谢你让我注意到这些。是的,也许问题的一部分是我没有考虑“取消勾选”的方面。