用户定义的控件及其属性

发布于 2024-12-07 17:42:50 字数 379 浏览 0 评论 0原文

我正在开发一个用户定义的按钮,它有两个这样的自定义属性:

public enum FirstType
{
    egg,
    leg
}
// first property:
public FirstType FirstProperty { get; set; }

我有一个基类和该基类的 5 个派生类,第二个属性将引用这 5 个中的一个,

//second property
public BaseClass SecondProperty { get; set; }

现在我的问题是:如何才能像第一个属性窗口中的第二个属性一样拥有这 5 个类的下拉列表?是否可以?

I am working on a user-defined button, this has two custom properties like this:

public enum FirstType
{
    egg,
    leg
}
// first property:
public FirstType FirstProperty { get; set; }

and I have a base class and 5 derived classes of this base class, and the second property will refer to one of these 5,

//second property
public BaseClass SecondProperty { get; set; }

Now my question is: how can I have a drop down list of these 5 classes for the second property in properties window like the first one? Is it possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初见你 2024-12-14 17:42:50

对于该属性,您需要创建自己的自定义 TypeConverter 并覆盖 GetStandardValues

这是您的属性:

[TypeConverter(typeof(MyTypeConverter)]
public BaseClass SecondProperty { get; set; }

这是您的类型转换器:

public class MyTypeConverter : TypeConverter
{
    ...

    public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    /// <summary>
    /// select only from list
    /// </summary>
    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
    {
        return true;
    }

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        return new StandardValuesCollection(/* list of derived classes */);
    }
}

For that property you need to create your own custom TypeConverter and override GetStandardValues

This is your property:

[TypeConverter(typeof(MyTypeConverter)]
public BaseClass SecondProperty { get; set; }

This is your type converter:

public class MyTypeConverter : TypeConverter
{
    ...

    public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    /// <summary>
    /// select only from list
    /// </summary>
    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
    {
        return true;
    }

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        return new StandardValuesCollection(/* list of derived classes */);
    }
}
土豪 2024-12-14 17:42:50

好的,我使用 enum 来解决我的问题,首先是这个枚举类型的属性,然后在该属性的 set 语句中调用这些类。感谢大家。

OK,I used enum to solve my problem, first a property of this enum type, then called those classes in set statement of the property. Thanks to all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文