2012-10-23 3 views
5

Sto vivendo il noto problema in cui dopo aver impostato un font TreeNode in grassetto, il testo del TreeNode viene troncato. Tuttavia, credo di aver trovato una situazione in cui tutte le "correzioni" comunemente accettate non funzionano.Grassetto treeview nodo troncato - correzione ufficiale non funzionerà perché il codice nel costruttore

soluzione comune:http://support.microsoft.com/kb/937215

node.NodeFont = new System.Drawing.Font(node.NodeFont, FontStyle.Bold); 
node.Text += string.Empty; 

Variante 1:C# Winforms bold treeview node doesn't show whole text (vedi risposta di Blunt)

node.NodeFont = new System.Drawing.Font(node.NodeFont, FontStyle.Bold); 
node.Text = node.Text; 

Variante 2:http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/acb877a6-7c9d-4408-aee4-0fb7db127934

node.NodeFont = new System.Drawing.Font(node.NodeFont, FontStyle.Bold); 
treeView1.BackColor = treeView1.BackColor;  

scenario in cui Sopra correzioni non funzionano:

Se il codice che imposta il nodo di grassetto è nel costruttore (sia di un modulo o, in questo caso, un controllo utente), le correzioni non funziona:

public partial class IncidentPlanAssociations : UserControl 
{ 
    public IncidentPlanAssociations() 
    { 
     InitializeComponent(); 

     TreeNode node = new TreeNode("This is a problem."); 
     node.NodeFont = new Font(treeView1.Font, FontStyle.Bold); 
     treeView1.Nodes.Add(node); 

     // This does not fix problem 
     node.Text += string.Empty; 

     // This does not fix problem 
     node.Text = node.Text; 

     // This does not fix problem 
     treeView1.BackColor = treeView1.BackColor; 

    } 
} 

Tuttavia, se ho posto una qualsiasi di queste tre "correzioni" in codice dietro un pulsante e fare clic dopo tutto fili che funzionerà bene. Sono sicuro che questo è qualcosa a che fare quando il treeview è inizialmente disegnato o qualcosa del genere, ma sto cercando di capire un buon modo per aggirarlo. Eventuali suggerimenti?

+0

Ho modificato il titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –

+0

Prova a chiamare 'treeview1.Refresh()' come ultima riga di codice nel tuo costruttore. –

+0

Grazie John per la modifica. –

risposta

8

Grazie a @Robert Harvey per l'assistenza.

Nel caso in cui qualcuno stia riscontrando un problema simile, la soluzione qui è stata spostare il codice dal Costruttore all'evento Load del controllo utente. Qualunque delle tre varianti sopra funzionerà.

io personalmente scelto di andare con:

private void IncidentPlanAssociations_Load(object sender, EventArgs e) 
{ 
    TreeNode node = new TreeNode("This is no longer a problem."); 
    node.NodeFont = new Font(treeView1.Font, FontStyle.Bold); 
    treeView1.Nodes.Add(node); 

    // This fixes the problem, now that the code 
    //  is in the Load event and not the constructor 
    node.Text = node.Text; 

} 

Il codice solo bisogno di essere nell'evento Load e non nel costruttore per questa soluzione per il bug noto per funzionare correttamente per me.

+2

Sembra che debba avvenire anche DOPO aver aggiunto il nodo al controllo treeView. (??) –

0

Se si assegna il carattere più grande che si intende utilizzare (il BOLD e/o la dimensione del punto più grande) al controllo TreeView di base, quindi si modifica esplicitamente il carattere in un carattere più piccolo per le righe di dimensioni standard, si vince ' t avere il problema di troncamento.

Inoltre, tutto sarà ben distanziato, se si sceglie il carattere più grande come non troppo distante dal carattere standard.

0

Utilizzare treeView.BeginUpdate() e treeView.EndUpdate() in qualsiasi modifica visiva.

Esempio:

this.treeView.BeginUpdate(); 
this.treeView.Nodes.Clear(); 
this.treeView.Nodes.AddRange(allNodes.ToArray()); 
this.treeView.EndUpdate(); 
0

Capisco che questo è un post molto vecchio, ma ho appena trovato una soluzione che funziona per me che ho trovato HERE. Apparentemente, impostando il colore posteriore per svuotarlo, si risolve il problema del taglio del testo in grassetto.

Ecco la correzione:

treeView.BackColor = Color.Empty;