在PropertyGrid中自定义的下拉菜单编辑控件显示为白色

3

我遇到了一个PropertyGrid控件的问题,与IT技术有关。我的类中有一个Uint32属性,它是一个位掩码。因此,我决定创建一个自定义下拉用户控件,带有32个按钮,以使Uint32可编辑。以下是该类(不包括按钮单击处理程序):

class MaskEditorControl : UserControl, IIntegerMaskControl
{
        public MaskEditorControl()
        {
            InitializeComponent();
        }

        public UInt32 ModifyMask(IServiceProvider provider, UInt32 mask)
        {
            IWindowsFormsEditorService editorService = null;
            if (provider != null)
                editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;

            if (editorService != null)
            {
                m_mask = mask;
                checkBox0.CheckState = (m_mask & (1 << 0)) == 0 ? CheckState.Unchecked : CheckState.Checked;
                checkBox1.CheckState = (m_mask & (1 << 1)) == 0 ? CheckState.Unchecked : CheckState.Checked;
                checkBox2.CheckState = (m_mask & (1 << 2)) == 0 ? CheckState.Unchecked : CheckState.Checked;
                editorService.DropDownControl(this);
            }

            return m_mask;
        }
        private UInt32 m_mask = 0;

}

ModifyMask(...)是实现了IIntegerMaskControl接口的函数,它被另一个类调用:

public interface IIntegerMaskControl
{
    UInt32 ModifyMask(IServiceProvider provider, UInt32 mask);
}

public class IntegerMaskEditor : UITypeEditor
{
    public static IIntegerMaskControl control = null;

    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.DropDown;
    }

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        if (control == null)
            return "Error: IIntegerMaskControl not set!";

        return control.ModifyMask(provider, (UInt32)value);
    }
}

这里是属性本身:

    [System.ComponentModel.CategoryAttribute("Base")]
    [Editor(typeof(IntegerMaskEditor), typeof(UITypeEditor))]
    public UInt32                                   renderMask { get; set; }

它能正常工作,但我的控件显示为白色(包括按钮),看起来很奇怪。我不知道原因在哪里。这是屏幕截图的链接:这就是控件在使用时的样子。有人对此有什么想法和避免方法吗?我可以调用一个窗体,但我宁愿坚持使用下拉列表。

提前致谢!

1个回答

1

属性网格使用ViewBackColor属性来显示下拉背景色。我没有看到其他允许更改下拉背景色的属性。

然而,下拉中显示的控件是父控件(一个窗体)的子控件,您可以使用以下代码修改:

public partial class MaskEditorControl : UserControl, IIntegerMaskControl
{
    private Color _initialBackColor;

    public MaskEditorControl()
    {
        InitializeComponent();
        _initialBackColor = BackColor;
    }

    protected override void OnParentChanged(EventArgs e)
    {
        base.OnParentChanged(e);
        if (Parent != null)
        {
            Parent.BackColor = _initialBackColor;
        }
    }
}

无法点赞该答案(声望不够),但它确实有效。谢谢!有没有办法告诉控件不要选择父级的背景颜色?那将是最好的方法。 - Sergey
我不这么认为,下拉菜单的容器表单(父级)使用视图颜色,我认为这是设计上的考虑,这样看起来更好 - 从属性网格创建者的角度来看 :-)。 - Simon Mourier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接