6

TreeNodeのフォントを太字に設定した後、TreeNodeのテキストが切り捨てられるというよく知られた問題が発生しています。しかし、一般的に受け入れられているすべての「修正」が機能しない状況を見つけたと思います。

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

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

バリエーション1: C#Winformsの太字のツリービューノードにテキスト全体が表示されない(BlunTの回答を参照)

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;

    }
}

ただし、これら3つの「修正」のいずれかをボタンの後ろのコードに配置し、すべてが実行された後にクリックすると、問題なく機能します。これは、ツリービューが最初に描画されたときなどに関係していると思いますが、それを回避するための良い方法を見つけようとしています。助言がありますか?

4

4 に答える 4

8

支援してくれた@RobertHarveyに感謝します。

誰かが同様の問題を経験している場合、ここでの回避策は、コードをコンストラクターからユーザーコントロールの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イベントに含める必要があり、コンストラクターに含める必要はありませんでした。

于 2012-10-24T20:27:01.247 に答える
0

使用する最大のフォント(太字および/または最大のポイントサイズ)をベースのTreeViewコントロールに割り当ててから、フォントを標準サイズの行の小さいフォントに明示的に変更すると、切り捨ては発生しません。問題。

さらに、標準フォントから離れすぎないように最大のフォントを選択すると、すべてが適切な間隔で配置されます。

于 2016-06-14T19:25:15.993 に答える
0

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

例:

this.treeView.BeginUpdate();
this.treeView.Nodes.Clear();
this.treeView.Nodes.AddRange(allNodes.ToArray());
this.treeView.EndUpdate();
于 2016-07-29T12:54:37.797 に答える
0

私はこれが非常に古い投稿であることを理解していますが、私はここで見つけた私のために働く解決策を見つけまし。どうやら、背景色を空に設定することで、太字のテキストが途切れる問題を解決しているようです。

修正は次のとおりです。

treeView.BackColor = Color.Empty;
于 2016-09-30T20:07:03.697 に答える