属性网格 +界面

发布于 2024-08-27 15:01:21 字数 549 浏览 5 评论 0原文

public interface ITest {
   void Somethink();
}

public class Test1 : ITest {
   public void Somethink()  { /* do stuff */ }
   public int Test1Property { get; set; }
}

public class Test2 : ITest {
   public void Somethink()  { /* do stuff */ }
   public float Test2Property { get; set; }
}

//Main class
public class MainClass
{
   [TypeConverter(ExpandableObjectConverter)]
   public ITest test { get; set; }
}

好吧,我有这样的东西。 MainClass 的实例由PropertyGrid 选择。

如何创建实现 ITest 的类的对象的 DropDownList(此处为 Test1 和 Test2)

public interface ITest {
   void Somethink();
}

public class Test1 : ITest {
   public void Somethink()  { /* do stuff */ }
   public int Test1Property { get; set; }
}

public class Test2 : ITest {
   public void Somethink()  { /* do stuff */ }
   public float Test2Property { get; set; }
}

//Main class
public class MainClass
{
   [TypeConverter(ExpandableObjectConverter)]
   public ITest test { get; set; }
}

Ok, i have sth like this. Instance of MainClass is selected by PropertyGrid.

How to make a DropDownList of objects of classes which implement ITest (here Test1 and Test2)

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

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

发布评论

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

评论(2

事情不是这样的。测试属性 getter 将返回一个实现 ITest 的具体类的对象。无论最后分配给它什么,要么是 null,要么是 Test1 的对象,要么是 Test2 的对象。 PropertyGrid 使用 Reflection 来查看对象 Type 及其成员。它将显示 Test1Property 或 Test2Property。你无法选择。

不确定您要做什么,如果您想分配不同类型的对象,您可能需要 UITypeEditor。

That's not how it works. The test property getter will return an object of a concrete class that implements ITest. Whatever was assigned to it last, either null, an object of Test1 or an object of Test2. PropertyGrid uses Reflection to look at the object Type and its members. It will display either Test1Property or Test2Property. You cannot choose.

Not sure what you are trying to do, you probably want a UITypeEditor if you want to assign an object of a different type.

追星践月 2024-09-03 15:01:21

好的,我使用了 UITypeEditor(thx nobugz),并为可能的值创建组合框。我从 Type[]BehaviorsWhichImplement(Type type) 获取的值 - 返回实现给定接口的类型数组。

当用户选择一个新值时,我会使用 Activator.CreateInstance 获得所选对象 BehaviorManager.GetBehavior(Type) 的新实例。并将其分配给属性。

当然,它不是一个下拉列表,但它也相当不错:-)

这是我关注的一篇文章 - http://philwinkel.com/blog/?p=4

我知道,我的语法很糟糕,抱歉,我仍在尝试用这个做某事;-)

Ok, I used UITypeEditor (thx nobugz), and create combobox for possible values. The values i get from Type[] BehaviorManager.GetBehaviorsWhichImplement(Type type) - that return an array of types implementing given interface.

When user have select a new value, i get a new instance of selected Object BehaviorManager.GetBehavior(Type) which using a Activator.CreateInstance. And assign it to Property.

Of course, it isn't a dropdownlist, but it's pretty good too :-)

here is a article which i following - http://philwinkel.com/blog/?p=4

I know, my grammer is tragic, sorry, i'm still trying to do sth with this ;-)

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