如何在TreeView的每个节点旁添加一个按钮?如何在TreeView的每个节点旁添加一个按钮?
回答
在treeview的每个节点旁添加一个按钮很困难。您必须自己处理树视图的绘制,并自己绘制按钮并模拟它们的功能,或创建子按钮控件并将它们显示在树控件中的正确位置,然后在控件滚动时处理它们的重新定位等。无论哪种方式,这将是一场噩梦。
幸运的是,有一个简单的方法:你不必做任何复杂的事情,因为你不应该做他们!
你有没有见过带按钮的树控件?不可以。因此,如果您的树形控件中包含按钮,最终用户将会看到它很奇怪。
你应该做的是考虑其他应用程序如何解决你正在尝试解决的问题,而不使用带有按钮的树控件,并像他们一样做。
这似乎公平。谢谢。 – Seva 2011-12-29 20:06:22
是的......但我需要一个带有文本框......糟透了吗?我正在创建一个深层复制工具。它需要一个复选框,并且用户可以在树上重命名每个节点。 :( – LightStriker 2012-11-21 21:09:10
你确定你需要的树的节点数尽可能多吗?怎么样只有一个文本框,只在需要的时候创建,并在你完成输入后立即销毁? – 2012-11-22 22:51:42
这里就是我发现在CodeProject上的源代码项目,其中有人已实际完成一个网站它是什么,你正在尝试做的..希望这会帮助你
How to put buttons inside a treeview 这是一个CodeProject上的链接项目实际上有来源与工作项目一起去。祝你好运
+1提供一个实际的回答这个问题,但我认为文章中按钮treeview截图的怪异进一步加强了我自己的观点。 – 2011-12-29 20:59:01
谢谢..我同意.. – MethodMan 2011-12-29 21:06:50
最简单的方法是自己画树。这里是一个小例子(请注意,PushButtonState位于System.Windows.Forms.VisualStyles命名空间里):
public class CustomTreeView : TreeView
{
private Rectangle buttonRect = new Rectangle(80, 2, 50, 26);
private StringFormat stringFormat;
public CustomTreeView()
{
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
DrawMode = TreeViewDrawMode.OwnerDrawText;
ShowLines = false;
FullRowSelect = true;
ItemHeight = 30;
stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Near;
stringFormat.LineAlignment = StringAlignment.Center;
}
protected override void OnDrawNode(DrawTreeNodeEventArgs e)
{
e.Graphics.DrawString(e.Node.Text, this.Font, new SolidBrush(this.ForeColor), e.Bounds, stringFormat);
ButtonRenderer.DrawButton(e.Graphics, new Rectangle(e.Node.Bounds.Location + new Size(buttonRect.Location), buttonRect.Size), "btn", this.Font, true, (e.Node.Tag != null) ? (PushButtonState)e.Node.Tag : PushButtonState.Normal);
}
protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)
{
if (e.Node.Tag != null && (PushButtonState)e.Node.Tag == PushButtonState.Pressed)
{
e.Node.Tag = PushButtonState.Normal;
MessageBox.Show(e.Node.Text + " clicked");
// force redraw
e.Node.Text = e.Node.Text;
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
TreeNode tnode = GetNodeAt(e.Location);
if (tnode == null) return;
Rectangle btnRectAbsolute = new Rectangle(tnode.Bounds.Location + new Size(buttonRect.Location), buttonRect.Size);
if (btnRectAbsolute.Contains(e.Location))
{
tnode.Tag = PushButtonState.Pressed;
tnode.Text = tnode.Text;
}
}
}
而且,你甚至可以无需创建定制控件实现这一点 - 只需要添加这些事件处理程序,以标准的TreeView
- 1. MVC3 Telerik Treeview为每个节点添加HTML元素(按钮)
- 2. 如何在WPF TreeView中的节点旁添加图标?
- 3. 如何在Drupal7中添加一个按钮点击按钮?
- 4. 向Drupal中的每个节点添加动态URL(或按钮)
- 5. 如何在每个TextView末尾添加可点击的按钮?
- 6. 如何在treeview中添加按钮?
- 7. 在节点中的C#WPF TreeView按钮
- 8. 如何在当前点击的按钮旁添加用户名?
- 9. 如何将按钮添加到具有相同类别的每个节点
- 10. 如何在另一个按钮旁边添加另一个按钮或文本视图?
- 11. 在jsp中的jstree中的每个节点上添加可单击的按钮
- 12. MVVM with TreeView - 添加节点
- 13. Jquery TreeView添加节点
- 14. 如何添加一个按钮,将按钮旁边的输入添加到答案中?
- 15. 如何将节点添加到TreeView中的选定节点?
- 16. Odoo - 添加按钮旁边的“创建”一个
- 17. 如何添加一个buttton2,同时点击另一个按钮1和按钮3,同时点击按钮2
- 18. 在asp.net treeview的每个分支中添加子节点的计数
- 19. 当我点击一个按钮时,如何在vb.net中每五秒添加一个点到我的分数?
- 20. 如何添加一个textview和一个edittext一旦我点击一个按钮?
- 21. 如何在Android的自动点击一个按钮,每一秒
- 22. 如何添加一个按钮到wx.MenuBar()?
- 23. 如何添加一个按钮作为
- 24. 如何在每个请求的每个winston日志节点js中添加uuid?
- 25. 如何在C#中添加每个json对象的父节点?
- 26. 如何在每个帖子上添加一个类似的页面按钮?
- 27. 在treeview中添加子节点
- 28. 如何在asp.net中的jqgrid的每一行添加一个按钮
- 29. 如何在树视图外绘制treeview节点+/-按钮?
- 30. 如何添加一个按钮在一个.md文件与Jekyll
你到目前为止有什么代码..提示你将使用Button btn = new Button()现在你必须将它存根在你的代码中 – MethodMan 2011-12-29 19:56:30
@DJKRAZE:那不行;他希望在树视图中。 – SLaks 2011-12-29 19:59:16
这是不可能的;你需要一个第三方的TreeView。 – SLaks 2011-12-29 19:59:31