我正在填充一个 WinForms TreeView 控件,并在加载每个节点时以不同方式设置它们的字体属性。
这些节点还允许内联编辑(通过按 F2 更改文本,或单击 Windows 资源管理器中的文件夹名称)。
但是,当节点进入编辑模式时,编辑时使用的字体将恢复为 TreeView 控件的默认字体,而不是特定节点的字体。
是否可以设置编辑每个节点时使用的编辑控件的字体,以匹配用于显示该 TreeView 节点的字体?(如果有,怎么做?)
正如您所说,对 TreeNode 源的检查表明该节点在进入编辑模式时正在使用编辑控件(来自 Windows UI 控件,而不是 .NET 窗体)。我在类中看不到任何将字体设置为编辑模式的内容,因此我认为您需要将消息直接发布到编辑控件。使用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));
}
}