ejemplos - C#Winforms nodo de vista en árbol en negrita no muestra texto completo
treeview checkbox c# (13)
Basado en MSDN Library , intente cambiar su código a:
Font font = new Font(tvQuestionSequence.Font, FontStyle.Bold);
foreach (QuestionnaireBuilder_Category cat in categories)
{
TreeNode node = new TreeNode();
node.Text = cat.Description;
node.Name = cat.Id.ToString();
node.NodeFont = font;
tvQuestionSequence.BeginUpdate(); //added newline here <--
tvQuestionSequence.Nodes.Add(node);
tvQuestionSequence.EndUpdate(); //added newline here <--
}
Funciona para mí
Estoy usando el siguiente código para hacer que mis treenodes sean negritas:
Font font = new Font(tvQuestionSequence.Font, FontStyle.Bold);
foreach (QuestionnaireBuilder_Category cat in categories)
{
TreeNode node = new TreeNode();
node.Text = cat.Description;
node.Name = cat.Id.ToString();
node.NodeFont = font;
tvQuestionSequence.Nodes.Add(node);
}
Pero el texto de los nodos negrita no se muestra correctamente. La (s) última (s) carta (s) no se muestran. ¿Cómo? ¿Y cómo resolver este problema?
Encontré esta publicación cuando busqué en la web porque estoy enfrentando exactamente el mismo problema.
Sin embargo, agregar un espacio en blanco al final del nodo no era una opción, y encontré una manera alternativa que parece solucionar el problema.
Después de configurar la fuente de mi nodo en negrita, todo lo que tengo que hacer es restablecer el texto del nodo con el mismo valor.
Aquí está la muestra del código:
Font boldFont = new Font(treeview.Font, FontStyle.Bold);
node.NodeFont = boldFont;
node.Text = node.Text;
Parece que el nodo se redibuja después de cambiar el texto, que es exactamente lo que quería en primer lugar.
Está en vb.Net, sin embargo, la solución para volver a ingresar el valor del campo TEXTO se soluciona muy bien. Como en:
With myNode
Dim myText As String = .Text ''capture the text
.NodeFont = New Font(<name of your treeview>.Font, FontStyle.Bold)
.Text = myText ''reset the text to the original value
End With
Este es un error conocido de Windows. La solución simple es solo agregar un carácter de espacio extra al final de sus cadenas. El carácter de espacio no será visible, pero aumentará el número de píxeles necesarios para dibujar la cadena, por lo que toda la cadena será visible.
Esto no me está ayudando. Lo que hizo el truco es hacer que la fuente sea un poco más grande y audaz a la hora del DISEÑO. (En la ventana de Propiedades)
Así que asegúrese de definir la vista de árbol con una fuente lo suficientemente grande, luego puede agregar nodos con una fuente más pequeña. Ellos encajarán.
Estoy de acuerdo con la solución provista. Solo quiero agregar algo para arrojar un poco más de luz sobre cuál es el problema. La vista en árbol tiene su propia fuente que determina el ancho de los elementos en el nivel raíz. Eso compensa el hecho de que solo hay una propiedad de altura de artículo disponible y ninguna propiedad de ancho de artículo.
La solución a su problema es determinar cuál debe ser la fuente de su nodo raíz, luego configure el árbol para esa misma fuente. Usted puede hacer eso en tiempo de diseño también.
Espero que ayude a alguien.
Hago lo siguiente, configuro el evento DrawNode para llamar, establece el nodo en negrita y elimina el color resaltado.
Puede establecer cualquier color que desee utilizando el primer parámetro de la función e.Graphics.FillRectangle.
private void SetNodeBoldWhenSelected(object sender, DrawTreeNodeEventArgs e)
{
if (e.Node == null) return;
var font = e.Node.NodeFont ?? e.Node.TreeView.Font;
if (e.Node.IsSelected)
{
font = new Font(font, FontStyle.Bold);
}
var bounds = new Rectangle( e.Bounds.X,e.Bounds.Y,e.Bounds.Width+20,e.Bounds.Height);
e.Graphics.FillRectangle(SystemBrushes.ControlDarkDark, bounds);
TextRenderer.DrawText(e.Graphics, e.Node.Text, font, bounds, SystemColors.HighlightText, TextFormatFlags.GlyphOverhangPadding);
}
Ahora cuando selecciono un nodo obtengo 20 píxeles más de espacio, para mi fuente, esto funciona bien, se puede calcular el tamaño "real" que se necesita pero no hay ninguna especificación que indique que debe hacerlo, pero puede usar Graphics.MeasureString si siente que necesitas hacer eso.
He encontrado que este es un problema de Windows. Una solución para este problema es esta:
En el formulario, el constructor establece la fuente de la vista en árbol en negrita. Al agregar nodos que no deben ser negrita, cambie la fuente a regular:
// Constructor of your form
public Form()
{
InitializeComponent();
Font font = new Font(tvQuestionSequence.Font, FontStyle.Bold);
tvQuestionSequence.Font = font;
}
// Add regular nodes (not bold)
Font font = new Font(tvQuestionSequence.Font, FontStyle.Regular);
TreeNode treeNode = new TreeNode();
treeNode.Text = "Foo";
treeNode.NodeFont = font;
TreeNode parent = tvQuestionSequence.Nodes.Find("parent", true);
parent.Nodes.Add(treeNode);
Lo que funcionó para mí: engancharme en el evento de carga en el constructor del Control y ajustar el nodo como se explica en la respuesta de BlunT.
public MyControl()
{
InitializeComponent();
_head = new TreeNode();
this.Load += (s, e) =>
{
trvParts.Nodes.Clear();
_head.NodeFont = new Font(trvParts.Font, FontStyle.Bold);
trvParts.Nodes.Add(_head);
_head.Text = "Node Name";
};
}
Me doy cuenta de que este es un hilo viejo y puede haber sido respondido. Acabo de encontrarme con este problema cuando estoy aprendiendo a usar TreeViews. Lo que funcionó para mí fue cambiar el tamaño de la fuente para todo el TreeView al mismo tamaño, o más grande que la fuente del nivel que desea en negrita. El tamaño de fuente predeterminado es 8. algo. Cambié el mío a 10, que era del tamaño que quería mis nodos, y el truncado desapareció.
Muy fácil y funciona bien
treeView1.SelectedNode.NodeFont = new System.Drawing.Font(treeView1.SelectedNode.TreeView.Font, treeView1.SelectedNode.TreeView.Font.Style | FontStyle.Bold);
this.treeView1.SelectedNode.Text += string.Empty;
Simplemente use treeView.BeginUpdate () antes de poner el nodo en negrita y luego treeView.EndUpdate () después de en negrita.
Una solución para este problema es esta:
Establezca la fuente predeterminada de treeview en negrita en las propiedades.
Y chnage para no audaz cuando lo necesites.