2

WinForms TreeView コントロールにデータを入力し、ロード時に各ノードのフォント属性を別々に設定しています。

ノードはインライン編集も可能です (F2 を押してテキストを変更するか、Windows エクスプローラーのフォルダー名のように一度選択してクリックします)。

ただし、ノードが編集モードになると、編集時に使用されるフォントは、その特定のノードのフォントではなく、TreeView コントロールの既定のフォントに戻ります。

各ノードの編集時に使用するエディット コントロールのフォントを、その TreeView ノードの表示に使用するフォントに合わせることはできますか? (そうであれば、どのように?)

4

1 に答える 1

4

あなたが言ったように、TreeNode ソースを調べると、ノードが編集モードになったときに (.NET フォームではなく Windows UI コントロールから) 編集コントロールを使用していることがわかります。編集モードでフォントを設定するクラスには何も表示されないため、編集コントロールに直接メッセージを投稿する必要があると思います。TVM_GETEDITCONTROLを使用してハンドルを取得し、WM_SETFONTを使用してフォントを設定します。おそらくFont.ToHfont()も必要になるでしょう。

編集: SendMessage を呼び出してフォントの変更を行う方法の例を次に示します。

[DllImport("user32.dll")]
internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

internal const int WM_SETFONT = 0x0030;
internal const int TVM_GETEDITCONTROL = 0x110F;

private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
    TreeNode nodeEditing = e.Node;
    IntPtr editControlHandle = SendMessage(treeView1.Handle, (uint)TVM_GETEDITCONTROL, IntPtr.Zero, IntPtr.Zero);
    if (editControlHandle != IntPtr.Zero)
    {
        SendMessage(editControlHandle, (uint)WM_SETFONT, nodeEditing.NodeFont.ToHfont(), New IntPtr(1));
    }
}
于 2011-04-19T23:49:09.493 に答える