Gre*_*g D 3 .net colordialog winforms
我ColorDialog在WinForms中启动一个组件,让用户选择一个特定的自定义控件的图表的背景颜色和前景色.两个配置选项都在配置对话框的同一页面上,因此我想在对话框启动时将颜色对话框的标题设置为"背景颜色"以更改图表的背景,并将"网格颜色"设置为更改颜色的网格.这将提供一个有用的用户体验,如果用户不确定他们是否选择更改背景或网格颜色,他们将能够查看图表的标题.
不幸的是,文档似乎没有提到任何操纵ColorDialog标题的方法.是否可以进行此更改?如果是这样,怎么样?
遗憾的是,无法更改常用颜色选择器对话框的标题.一种可能的解决方案是找到或创建一个颜色选择器控件,以专用的形式托管,当然,您可以分配适当的标题.或者您可以采用组合框形式的Office颜色选择样式.
编辑
受Rob的回答启发,我找到了以下解决方案.它涉及从ColorDialog继承,从HookProc方法抢夺HWND 并通过P/Invoke 调用SetWindowText:
public class MyColorDialog : ColorDialog
{
[DllImport("user32.dll")]
static extern bool SetWindowText(IntPtr hWnd, string lpString);
private string title = string.Empty;
private bool titleSet = false;
public string Title
{
get { return title; }
set
{
if (value != null && value != title)
{
title = value;
titleSet = false;
}
}
}
protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam)
{
if (!titleSet)
{
SetWindowText(hWnd, title);
titleSet = true;
}
return base.HookProc(hWnd, msg, wparam, lparam);
}
}
Run Code Online (Sandbox Code Playgroud)