我在WinForms中旋转了 ColorDialog 组件,以允许用户选择特定自定义控件的图表的背景色和前景色。这两个配置选项都在配置对话框的同一页面上,因此我想在弹出对话框以更改图表背景时将颜色对话框的标题设置为“背景色”,并在“网格颜色”中将其设置为“网格颜色”的网格。这将提供有用的UX,如果用户不确定是否选择更改背景或网格颜色,则用户可以在其中查看图表标题。

不幸的是,文档似乎没有提到任何操作ColorDialog标题的方法。是否可以进行此更改?如果是这样,怎么办?

最佳答案

不幸的是,无法更改通用颜色选择器对话框的标题。一种可能的解决方案是查找或创建颜色选择器控件以专用形式托管,当然,您可以分配适当的标题。或者,您也可以组合框的形式adopt the Office style of color picking

编辑

受罗伯(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);
    }
}

关于.net - 如何更改ColorDialog的标题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/762009/

10-11 23:22
查看更多