C# winform treeview的子节点中可以添加控件么?

flynncode 2009-12-09 10:44:18
强烈强烈请求知道的人说一下下


我在TreeView的字节点当中,能不能添加一个控件
类似

-- --A(父结点)
B(子结点) X(button)-控件

然后能X控件的事件控制子节点的删除。。
...全文
1504 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
F_18E 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wartim 的回复:]
大同小异吧

C# code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Dr……
[/Quote]谢谢高人分享
zhaojun125 2009-12-10
  • 打赏
  • 举报
回复
这个 还真没见过这样干的
期待高人来实现一下
flynncode 2009-12-10
  • 打赏
  • 举报
回复
楼上高人。。。高人我先把这个整成usercontrol再试试。。。。有问题再问你哈。。。
wartim 2009-12-10
  • 打赏
  • 举报
回复
大同小异吧


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace WindowsApplication217
{
public partial class Form1 : Form
{
TreeView TV = new TreeView();

public Form1()
{
InitializeComponent();

TV.Parent = this;
TV.Dock = DockStyle.Fill;
TV.ItemHeight = 30;

TreeNode Root = TV.Nodes.Add("根");

AddDeleteButtonChildNode(Root, "1");
AddDeleteButtonChildNode(Root, "2");
AddDeleteButtonChildNode(Root, "3");

TV.AfterExpand += new TreeViewEventHandler(TV_AfterExpand);
TV.AfterCollapse += new TreeViewEventHandler(TV_AfterCollapse);
}

void TV_AfterCollapse(object sender, TreeViewEventArgs e)
{
ChangeDeleteButtonVisible(e.Node, false);
}

void TV_AfterExpand(object sender, TreeViewEventArgs e)
{
ChangeDeleteButtonVisible(e.Node, true);
}

void ChangeDeleteButtonVisible(TreeNode ParentNode, bool Visible)
{
foreach (TreeNode ChildNode in ParentNode.Nodes)
{
Button B = (Button)ChildNode.Tag;
B.Location = ChildNode.Bounds.Location;
B.Left += ChildNode.Bounds.Width;
B.Visible = Visible;
}
}

void AddDeleteButtonChildNode(TreeNode ParentNode, String Text)
{
TreeNode Node = ParentNode.Nodes.Add(Text);

Button B = new Button();
B.Parent = TV;
B.Text = "删除";
B.Visible = false;
B.Click += new EventHandler(B_Click);

B.Tag = Node;
Node.Tag = B;
}

void B_Click(object sender, EventArgs e)
{
Button B = (Button)sender;
TreeNode Node = (TreeNode)B.Tag;
TreeNode ParentNode = Node.Parent;

B.Dispose();
Node.Remove();

ChangeDeleteButtonVisible(ParentNode, true); // 刷新重新定位按钮
}
}
}
flynncode 2009-12-10
  • 打赏
  • 举报
回复
楼上的大哥,,你介个不对。。我不是要的这个效果。。。

我不要node里面是可输入的text,
我要的效果是node那列还是label显示,但是最后面有一个x的图点图删除,类似那个gridview的自定义控件一样
wartim 2009-12-10
  • 打赏
  • 举报
回复
最好再加入某个TextBox获得焦点事件时触发TreeView的选中节点事件
wartim 2009-12-10
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace WindowsApplication217
{
public partial class Form1 : Form
{
TreeView TV = new TreeView();

public Form1()
{
InitializeComponent();

TV.Parent = this;
TV.Dock = DockStyle.Fill;
TV.ItemHeight = 30;

TreeNode Root=TV.Nodes.Add("根");

AddTextBoxChildNode(Root, "1");
AddTextBoxChildNode(Root, "2");
AddTextBoxChildNode(Root, "3");

TV.AfterExpand += new TreeViewEventHandler(TV_AfterExpand);
TV.AfterCollapse += new TreeViewEventHandler(TV_AfterCollapse);
}

void TV_AfterCollapse(object sender, TreeViewEventArgs e)
{
ChangeTextBoxVisible(e.Node,false);
}

void TV_AfterExpand(object sender, TreeViewEventArgs e)
{
ChangeTextBoxVisible(e.Node, true);
}

void ChangeTextBoxVisible(TreeNode ParentNode,bool Visible)
{
foreach (TreeNode ChildNode in ParentNode.Nodes)
{
TextBox TB = (TextBox)ChildNode.Tag;
TB.Location = ChildNode.Bounds . Location;
TB.Visible = Visible;
}
}

void AddTextBoxChildNode(TreeNode ParentNode, String Text)
{
TreeNode Node = ParentNode.Nodes.Add(Text);

TextBox TB = new TextBox();
TB.Parent = TV;
TB.Text = Text;
TB.Visible = false;
TB.TextChanged += new EventHandler(TB_TextChanged);
TB.Tag = Node;
Node.Tag = TB;
}

void TB_TextChanged(object sender, EventArgs e)
{
TextBox TB=(TextBox)sender;
TreeNode Node = (TreeNode)TB.Tag;

Node.Text = TB.Text;
}
}
}
shighui 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 flynncode 的回复:]
winform下有没有类似div的可以点击隐藏,再点出现的效果


[/Quote]

你就自己控制啊,点一下设为隐藏,再点出现啊。
lang_csdn 2009-12-10
  • 打赏
  • 举报
回复
在winforms下面吗?那用第三方控件吧。

DevExpress
Infragistics
flynncode 2009-12-10
  • 打赏
  • 举报
回复
间接实现的话,有没有什么好的提示啊。。高人啊。。。。等待。。

winform下有没有类似div的可以点击隐藏,再点出现的效果

夏脑 2009-12-10
  • 打赏
  • 举报
回复
间接实现
shighui 2009-12-10
  • 打赏
  • 举报
回复
估计直接没法加的喂!再想想别的方法实现间接效果吧。
simonezhlx 2009-12-10
  • 打赏
  • 举报
回复
似乎没有,需要的话只能自己加浮动的了,点击那个节点在相应位置浮出按钮
wartim 2009-12-10
  • 打赏
  • 举报
回复
设置treeview的ImageList
然后设置每个节点的ImageIndex
长度是动态的,可以设置按钮的起始距离
flynncode 2009-12-10
  • 打赏
  • 举报
回复
楼上的大哥在不在。。。

这个子节点还有个图
(图)aaAa (按钮)
这样的一个效果,我图怎么加进去。而且文本部分的长度怎么设置啊。。。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧