C# PropertyGrid--让所有属性不加粗

问题描述 投票:2回答:2

在一个PropertyGrid表单元素中,当我向我的类别添加属性时,一些属性以粗体字出现。现在,我知道这表明它们是该类别中的默认值。我的问题是如何使所有属性 粗体?我知道一种可能的方法是改变DefaultValueAttribute属性,但我想知道是否可以用另一种方法。这个帖子 建议我可能要使用反射,这对我来说有点神秘:) 先谢谢你

c# winforms propertygrid
2个回答
3
投票

对于每个属性,你可以添加。

private bool ShouldSerialize{PropertyName}() { return false; }

除此之外,你就进入了自定义的领域了 PropertyDescriptor 的实施,通过 ICustomTypeDescriptorTypeDescriptionProvider.

请注意,这种模式在很多地方都有使用,但在一些(XmlSerializer例如,),它被要求是一个。public 方法。


1
投票

在你自己的属性上使用[Default]属性,否则你可以做--风险自负--以下可怕的黑客。

在.Net Framework 4.7.2中尝试过。你会失去类别上的粗体。

class MyNoBoldPropertyGrid : PropertyGrid
{
    private void SetFontNoBold()
    {
        if (!DesignMode)
        {
            object lv = Controls[2];
            Type lvType = lv.GetType();
            FieldInfo pi = lvType.GetField("fontBold", BindingFlags.Instance | BindingFlags.NonPublic);
            if (pi != null)
            {
                pi.SetValue(lv, Font);
            }
        }
    }
    protected override void OnPaint(PaintEventArgs pevent)
    {
        SetFontNoBold();
        base.OnPaint(pevent);
    }           

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x210) // WM_PARENTNOTIFY
            SetFontNoBold();        
        base.WndProc(ref m);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.