gpt4 book ai didi

controls - PropertyGrid 中的自定义下拉编辑器控件以白色显示

转载 作者:行者123 更新时间:2023-12-02 09:12:13 26 4
gpt4 key购买 nike

对 PropertyGrid 控件进行了一些运行,现在偶然发现了一个奇怪的问题。我在一个类中有一个 Uint32 属性,它是一个位掩码。因此,我决定创建一个带有 32 个按钮的自定义下拉 UserControl,以使 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 接口(interface)的实现函数:

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; }

它可以工作,但我的控件显示为白色(包括按钮),这看起来不对。我不知道为什么。以下是屏幕截图的链接:that is how the control looks like in action 。任何人都知道为什么以及如何避免它?我可以调用表单,但我宁愿坚持使用下拉菜单。

提前致谢!

最佳答案

属性网格使用 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;
}
}
}

关于controls - PropertyGrid 中的自定义下拉编辑器控件以白色显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com