如何判断C# treeView结点是展开还是折叠? (WinForm)我想实现:点击某个结点时,如果该结点是折叠的就展开,如果该结点是展开的就折叠。请问该怎么实现?刚才开始学,我最初是用一个bool类型的值来判断的,但这样有很大的缺陷,效果不好,请高手指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private void button1_Click(object sender, System.EventArgs e){ if (treeView1.SelectedNode.IsExpanded) { treeView1.SelectedNode.Collapse(); MessageBox.Show(treeView1.SelectedNode.Text + " tree node collapsed."); } else { treeView1.SelectedNode.Expand(); MessageBox.Show(treeView1.SelectedNode.Text + " tree node expanded."); }} IsExpanded 获取一个值,用以指示树节点是否处于可展开状态 -- ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/CPref17/html/T_System_Windows_Forms_TreeNode_Members.htm 好像不行哦,会提示:“未将对象引用设置到对象的实例”。我是在treeView 的NodeMouseClick 事件下写的代码。 设置节点的SelectAction属性为Expand就能实现该节点的折叠或是展开,如果要是判断节点的折叠打开状态可以检查节点的Expanded属性true为展开,反之折叠;要处理事件的话在treeview的select事件里处理,点击节点之后处理用AfterSelect事件,点击节点之前用BeforeSelect事件 private void button1_Click(object sender, System.EventArgs e){ if (treeView1.SelectedNode.IsExpanded) { treeView1.SelectedNode.Collapse(); MessageBox.Show(treeView1.SelectedNode.Text + " tree node collapsed."); } else { treeView1.SelectedNode.Expand(); MessageBox.Show(treeView1.SelectedNode.Text + " tree node expanded."); }} jiatong1981 所提供的方法是能够实现了我想要的功能了,但是有一个问题就是:当我点下节点后,该节点展开了,(这个时候该节点就突出显示了)如果我再接着点该节点,它就不能折叠起来了,只有当我点到别的节点上(展开的节点失去了突出显示)再点回刚才展开的节点才起作用,请问这个问题又怎么解决? private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (treeView1.SelectedNode.IsExpanded) { treeView1.SelectedNode.Collapse(); } else { treeView1.SelectedNode.Expand(); } } private void treeView1_AfterExpand(object sender, TreeViewEventArgs e) { this.treeView1.SelectedNode = null; } private void treeView1_AfterCollapse(object sender, TreeViewEventArgs e) { this.treeView1.SelectedNode = null; } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (treeView1.SelectedNode.IsExpanded) { treeView1.SelectedNode.Collapse(); this.treeView1.SelectedNode = null; } else { treeView1.SelectedNode.Expand(); this.treeView1.SelectedNode = null; } } 主要是事件的问题,当你再次选择同一个节点时AfterSelect事件不会被触发,更符合逻辑的办法是使用MouseClick事件,然后使用TreeView的GetNodeAt函数来获取鼠标下的树节点,再判断其是否展开等逻辑 如果是用.net2005,可以用如下方法protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { …………………//此处为执行代码 //应注意的是,这个代码一定要写在最下面,如果写到前面了,可能有些操作会被取消,因为它装选择的结点置空了。 if (TreeView1.SelectedNode.Expanded == true) { TreeView1.SelectedNode.Collapse(); TreeView1.SelectedNode.Selected = false; } else { TreeView1.SelectedNode.Expand(); TreeView1.SelectedNode.Selected = false; } } 自定义控件的背景色如何设置成透明? 点击按钮,弹出日历后,日历会把单元格撑得很大,这应该怎样设置? C# 操作服务器上的Excel文件,求教…… 怎样删除listview中的数据? 把数组元素写入textBox C# 实现 视频音频 分割 论坛上的HtmlEditor是这样设计的? Windows下的DataGrid中,當某列的連續行值相同時,只顯示最上面那一行 类如何直接转化为bytes 使用ADSI应该怎样来创建用户的邮箱 asp.net网站QQ在线咨询代码 求助:关于.net framework 3.0的RichTextBox
private void button1_Click(object sender, System.EventArgs e)
{
if (treeView1.SelectedNode.IsExpanded)
{
treeView1.SelectedNode.Collapse();
MessageBox.Show(treeView1.SelectedNode.Text +
" tree node collapsed.");
}
else
{
treeView1.SelectedNode.Expand();
MessageBox.Show(treeView1.SelectedNode.Text +
" tree node expanded.");
}
}
-- ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/CPref17/html/T_System_Windows_Forms_TreeNode_Members.htm
{
if (treeView1.SelectedNode.IsExpanded)
{
treeView1.SelectedNode.Collapse();
MessageBox.Show(treeView1.SelectedNode.Text +
" tree node collapsed.");
}
else
{
treeView1.SelectedNode.Expand();
MessageBox.Show(treeView1.SelectedNode.Text +
" tree node expanded.");
}
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.IsExpanded)
{
treeView1.SelectedNode.Collapse(); }
else
{
treeView1.SelectedNode.Expand();
} } private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
{
this.treeView1.SelectedNode = null;
} private void treeView1_AfterCollapse(object sender, TreeViewEventArgs e)
{
this.treeView1.SelectedNode = null;
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.IsExpanded)
{
treeView1.SelectedNode.Collapse();
this.treeView1.SelectedNode = null;
}
else
{
treeView1.SelectedNode.Expand();
this.treeView1.SelectedNode = null;
} }
更符合逻辑的办法是使用MouseClick事件,然后使用TreeView的GetNodeAt函数来获取
鼠标下的树节点,再判断其是否展开等逻辑
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{ …………………//此处为执行代码
//应注意的是,这个代码一定要写在最下面,如果写到前面了,可能有些操作会被取消,因为它装选择的结点置空了。
if (TreeView1.SelectedNode.Expanded == true)
{
TreeView1.SelectedNode.Collapse();
TreeView1.SelectedNode.Selected = false;
}
else
{
TreeView1.SelectedNode.Expand();
TreeView1.SelectedNode.Selected = false;
}
}