C#generics usercontrol

Tot*_*oto 26 c# generics user-controls

我想定义以下控件:

public partial class ObjectSelectorControl<T> : UserControl where T : class 
Run Code Online (Sandbox Code Playgroud)

问题是设计师无法解决这个问题.这个问题有解决方法吗?

P.K*_*P.K 35

这有效

public class Control1<T> : UserControl { ... }

public class Control2 : Control1<double> { ... }

public class Control3 : Control2 { ... }
Run Code Online (Sandbox Code Playgroud)

在这里读过:

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/0c265543-d6f0-41f6-beeb-b89e0071c5c3

  • +1实际上与我建议的解决方案完全相同,但描述得更清晰. (2认同)
  • 从 *VS 2015.1* 开始,Windows 窗体设计器显示具有通用基类的类,没有任何问题。[参见示例](/sf/answers/3463405851/)。 (2认同)

Fil*_*ara 11

听起来很像我们在项目中所做的.

有一个通用的基类:

public partial class controlItemList<TBaseItem, TBaseItemCollection> : UserControl, IUIDispatcher
    where TBaseItem : new()
    where TBaseItemCollection : IItemCollection<TBaseItem>
Run Code Online (Sandbox Code Playgroud)

然后,对于每次使用,我们定义一个非泛型版本(设计者仍然无法使用):

public class controlMessagesNonGenericParent : controlItemList<MailItem, MailItemCollection>
{
}
Run Code Online (Sandbox Code Playgroud)

...然后我们派生出可以在设计师中使用的控件:

public partial class controlMessages : controlMessagesNonGenericParent
{
...
}
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,但是直接使用泛型类作为控件是不可能的。这就是我们对其进行子类化的原因,以便它可以在设计器中使用。子类化版本修改行为的事实在这里无关紧要。 (2认同)