2012-10-23 4 views
5

であるため、公式修正が機能しません。TreeNodeのフォントを太字に設定した後、TreeNodeのテキストが切り捨てられるというよく知られた問題が発生しています。しかし、私は、一般的に受け入れられている「修正」のすべてがうまくいかない状況を発見したと思います。Bold treeview node truncated - コンストラクタのコードが

一般的な解決策:http://support.microsoft.com/kb/937215

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

バリエーション1:C# Winforms bold treeview node doesn't show whole text(ブラントの答えを参照)

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

バリエーション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;  

上記の修正が動作しないというシナリオ:

大胆にノードを設定するコードがコンストラクタである場合(フォームまたは、この場合は、ユーザーコントロールのいずれか)、修正動作しません。

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; 

    } 
} 

をしかし、私はボタンの背後にあるコードでは、これら三つの「修正」のいずれかを配置し、すべてはそれだけで正常に動作します実行した後、それをクリックした場合。私は、これはツリービューが最初に描画されたときなどと関係があると確信していますが、私はその周りに良い方法を見つけようとしています。助言がありますか?

+0

私はあなたのタイトルを編集しました。 「[質問には「タイトル内に「タグ」を含める必要がありますか」(http://meta.stackexchange.com/questions/19190/)」を参照してください。コンセンサスは「いいえ、そうすべきではありません」です。 –

+0

'treeview1.Refresh()'をコンストラクタの最後のコード行として呼び出してみてください。 –

+0

Johnさんに編集をお願いします。 –

答えて

8

ありがとう@Robert Harvey

同様の問題が発生した場合は、コードをコンストラクタからユーザーコントロールのLoadイベントに移動してください。上記の3つのバリエーションのいずれかが動作します。

私は個人的に行くことを選んだ:

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; 

} 

だけLoadイベントであることを、よく知られたバグにこの回避策のコンストラクタで私のために正常に動作しないように必要なコード。

+2

また、ノードをtreeViewコントロールに追加した後に実行する必要があります。 (??) –

0

使用する予定の最大フォント(BOLDおよび/または最大ポイントサイズ)を基本のTreeViewコントロールに割り当て、標準サイズの行のフォントを明示的に小さいフォントに変更すると、トランケーションの問題があります。

また、最大のフォントを標準フォントからあまり離れていないものとして選択すると、すべてがうまく配置されます。

0

視覚的な変更では、treeView.BeginUpdate()およびtreeView.EndUpdate()を使用します。

例:

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

私はこれを理解しては非常に古いポストですが、私はちょうど私がHEREを見つけた私の作品解決策を見つけました。明らかにバックカラーを空にすることで、太字のテキストが途切れてしまう問題を解決します。ここで

は修正です:

treeView.BackColor = Color.Empty; 
関連する問題