c# - 隐藏可扩展属性的省略号 (…) 按钮,例如属性网格中字体属性的 "…"按钮

标签 c# winforms custom-controls propertygrid design-time

我在自定义控件中添加了一个新属性,作为可扩展属性,例如属性网格中的字体属性。在 Windows 窗体应用程序项目中使用自定义控件后,我在属性网格中看到一个省略号 (...) 按钮,类似于字体属性的“...”按钮。 (更多信息请参见下图。)

One of my custom control properties

现在,我想隐藏新的可扩展属性的省略号 (...) 按钮。

可扩展的属性代码是:

[DisplayName("Floors Information")]
[Description("Floors Informationnnnnnnnnnnnnnnn")]
[DefaultProperty("TitleText")]
[DesignerCategory("Component")]
public class FloorsInformation : DockContainerItem
{
    private SimilarFloorsInformation similarFloorsInformation = new SimilarFloorsInformation();

    public FloorsInformation()
    {

    }

    [Category("Data")]
    [DisplayName("Similar Floors Panel")]
    [Description("Similar Floors Panellllllllllllllllllll")]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [Editor(typeof(ItemsCollectionEditor), typeof(UITypeEditor))]
    //[TypeConverter(typeof(ExpandableObjectConverter))]
    //[TypeConverter(typeof(SimilarFloorsInformationTypeConverter))]
    public SimilarFloorsInformation SimilarFloorsInfo
    {
        get
        {
            return similarFloorsInformation;
        }
    }
}

[DisplayName("Similar Floors Information")]
[Description("Similar Floors Informationnnnnnnnnnnnnnnn")]
[DefaultProperty("Text")]
[DesignerCategory("Component")]
[TypeConverter(typeof(SimilarFloorsInformationTypeConverter))]
//[TypeConverter(typeof(ExpandableObjectConverter))]
public class SimilarFloorsInformation : ExpandablePanel
{
    private Color canvasColor = SystemColors.Control;
    private eCollapseDirection collapseDirection = eCollapseDirection.LeftToRight;
    private eDotNetBarStyle colorSchemeStyle = eDotNetBarStyle.StyleManagerControlled;
    private DockStyle dock = DockStyle.Right;
    private eTitleButtonAlignment expandButtonAlignment = eTitleButtonAlignment.Left;
    private bool expanded = false;
    private bool markupUsesStyleAlignment = true;
    private Size size = new Size(30, 177);

    public SimilarFloorsInformation()
    {

    }
}

public class SimilarFloorsInformationTypeConverter : ExpandableObjectConverter//TypeConverter
{
    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        if (destinationType == typeof(SimilarFloorsInformation))
        {
            return true;
        }
        return base.CanConvertTo(context, destinationType);
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (destinationType == typeof(String) && value is SimilarFloorsInformation)
        {
            SimilarFloorsInformation similarFloorsInformation = (SimilarFloorsInformation)value;
            return similarFloorsInformation.TitleText;
        }
        return base.ConvertTo(context, culture, value, destinationType);
    }

    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        if (sourceType == typeof(string))
        {
            return true;
        }
        return base.CanConvertFrom(context, sourceType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (value is string)
        {
            SimilarFloorsInformation similarFloorsInformation = new SimilarFloorsInformation();
            similarFloorsInformation.TitleText = (string)value;
            return similarFloorsInformation;
        }
        return base.ConvertFrom(context, culture, value);
    }
}

最佳答案

您应该实现从 UITypeEditor 派生的自己的类并覆盖GetEditStyle方法如下:

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

然后使用 EditorAttribute :

[Editor(typeof(YourTypeEditor), typeof(UITypeEditor))]

更新 1:

嗯。我刚刚意识到您已经在该属性上应用了 EditorAttribute:

[Editor(typeof(ItemsCollectionEditor), typeof(UITypeEditor))]
public SimilarFloorsInformation SimilarFloorsInfo
{
    get
    {
        return similarFloorsInformation;
    }
}

因此,您应该重写 ItemsCollectionEditor 中的 GetEditStyle

关于c# - 隐藏可扩展属性的省略号 (…) 按钮,例如属性网格中字体属性的 "…"按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826684/

相关文章:

c# - 将\r 后面没有\n 的所有实例替换为\r\n 的正则表达式

wpf - 如何摆脱在 wpf 应用程序中包含自定义控件导致的命名空间错误?

c# - 总虚拟内存为我的应用程序返回不切实际的数字

c# - 如何防止 Visual Studio 设计器在 DataGridView 中自动生成列?

c# - 我应该在 Windows 窗体项目中使用数据绑定(bind)吗?

c# - 在 ListView 中更改颜色线

c# - 如何检查属性是否从自定义控件内部绑定(bind)

c# - 无法创建自定义控件的复杂属性

C# 在没有 app.config 的情况下设置探测 privatePath?

c# - arraylist 对象的排列