¿Cómo agrego un botón al lado de cada nodo de un TreeView?¿Cómo agrego un botón al lado de cada nodo de un TreeView?
Respuesta
Agregar un botón al lado de cada nodo de una vista de árbol es difícil. Tendría que manejar el dibujo de la vista de árbol usted mismo, y dibujar los botones usted mismo y emular su funcionalidad, o crear controles de botón secundarios y mostrarlos en los lugares correctos dentro del control de árbol y luego manejar reposicionarlos cuando el control se desplaza, etc. De cualquier forma, va a ser una pesadilla.
Afortunadamente, hay una salida fácil: no tienes que hacer ninguna de esas cosas complicadas, ¡PORQUE NO DEBES HACERLOS!
¿Alguna vez has visto un control de árbol con botones en él? No. Por lo tanto, si su control de árbol tiene botones, los usuarios finales lo considerarán extraño.
Lo que debe hacer es considerar cómo otras aplicaciones han resuelto el problema que se está tratando de resolver sin necesidad de utilizar controles de árbol con botones en ellos, y hacen lo que hacen.
que parece justo. Gracias. – Seva
Sí ... Pero necesito uno con cuadros de texto ... ¿Chupas, verdad? Estoy creando una herramienta de copia profunda. Necesita una casilla de verificación y la capacidad del usuario para cambiar el nombre de cada nodo en el árbol. :( – LightStriker
¿Estás seguro de que necesita la mayor cantidad de cuadros de texto, ya que hay nodos en el árbol? ¿Qué tal un solo cuadro de texto, sólo se crea cuando sea necesario, y destruida tan pronto como haya terminado de escribir en ella? –
Aquí es un sitio donde he encontrado proyecto de código fuente en CodeProject en la que alguien realmente ha logrado lo que sea que usted está tratando de hacer .. espero que esto le ayudará a
How to put buttons inside a treeview Este es un CodeProject vincular el proyecto en realidad tiene una fuente para ir junto con el proyecto de trabajo. buena suerte
1 para proporcionar una efectiva Respondo a la pregunta, pero creo que la rareza de las capturas de pantalla del botón treeview en el artículo fortalece aún más mi propio punto. –
gracias ... y estoy de acuerdo ... – MethodMan
La forma más sencilla de hacerlo es dibujar el árbol mismo. He aquí un pequeño ejemplo (tenga en cuenta que se encuentra en el interior PushButtonState System.Windows.Forms.VisualStyles espacio de nombres):
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;
}
}
}
Además, se puede lograr esto incluso sin crear controles personalizados - sólo tiene que añadir estos controladores de eventos a nivel TreeView
- 1. ¿Cómo puedo hacer clic con el botón derecho para seleccionar un nodo en un control treeview?
- 2. ¿Cómo agrego un botón al lado derecho de mi navigationController después de presionar otro controlador de vista?
- 3. nodo no seleccionable en TreeView
- 4. ¿Cómo puedo encontrar un nodo raíz en TreeView?
- 5. ¿Cómo agrego iconos junto a los nodos en un WPF TreeView?
- 6. Buscar nodo TreeView por valor
- 7. ¿Cómo agrego un botón personalizado a la lista de administrador?
- 8. Seleccionar un nodo en TreeView virtualizado con WPF
- 9. ¿Puedo vincular una WPF TreeView a un único nodo raíz?
- 10. ¿Cómo colocar un cuadro de texto líquido/elástico al lado de un botón?
- 11. ¿Cómo agrego un UIMenuItem personalizado al UIMenuController en un UITextView?
- 12. ¿Cómo puedo determinar si el nodo seleccionado es un nodo secundario o secundario en TreeView?
- 13. ¿Cómo agrego un script de python al registro de inicio?
- 14. Agregue otro botón al lado del botón "Atrás" a la izquierda de un UINavigationBar
- 15. ¿Cómo agrego el código al botón de salida en un formulario C#?
- 16. WPF: TreeView dentro de un ComboBox
- 17. ASP.NET TreeView y selección del nodo seleccionado
- 18. Botón Agregar al lado derecho del encabezado
- 19. ¿Cómo agrego un botón "buscar" en un campo de entrada de texto?
- 20. ¿Cómo agregar un atributo al nodo Nokogiri?
- 21. ¿Cómo agrego logging.properties al classpath de un proyecto de Eclipse?
- 22. C#: propietario de TreeView dibujando con ownerdrawtext y el negro raro resaltando al hacer clic en un nodo
- 23. Mostrar errores de enlace al lado de cada entrada
- 24. Cómo seleccionar cierto nodo secundario en TreeView, C#
- 25. Enumerar todos los nodos secundarios de un nodo principal en un control treeview en Visual C#
- 26. Cómo alinear el botón en wpf treeview
- 27. cómo aplanar un WPF TreeView
- 28. ¿Cómo se agrega un botón de edición a cada fila en un informe en Oracle APEX?
- 29. ¿Cómo agrego un artículo al principio de la cola?
- 30. ¿Cómo agrego un módulo al autocompletado de ipython?
qué código tiene hasta ahora .. sugerencia que usaría el botón btn = new Button() ahora tiene que anclarlo en su código – MethodMan
@DJKRAZE: Eso no funcionaría; él lo quiere en la vista de árbol. – SLaks
Esto no es posible; necesita un TreeView de terceros. – SLaks