2011-05-27 58 views
1

我已经创建了一个从TextBox派生的自定义文本框控件。如何在不禁用现有设计器功能的情况下将设计器动词添加到控件?

要添加设计器动词,我创建了一个设计器,我将其附加到我的控件上,但这样做会禁用连接到TextBox类的System.Windows.Forms.Design.TextBoxDesigner中的所有现有设计器功能。

TextBoxDesigner类设置为internal所以我不能从我那里派生我的设计师。

我在做什么错?

有没有其他方法可以将设计时功能添加到派生控件而不会破坏已有的功能?

回答

0

如果您发现没有其他替代方案可以继承而不真的继承。

class ExtendedTextboxDesigner : ControlDesigner 
{ 
    public ExtendedTextboxDesigner() 
    { 
     var atts = (DesignerAttribute[])typeof(TextBox).GetCustomAttributes(
      typeof(DesignerAttribute), 
      false); 

     var designer = (ControlDesigner)Activator.CreateInstance(
      Type.GetType(atts[0].DesignerTypeName)); 
    } 

    private ControlDesigner Base { get; set; } 

    public override bool CanBeParentedTo(IDesigner parentDesigner) 
    { 
     return Base.CanBeParentedTo(parentDesigner); 
    } 

    // ... 
} 

这样做,你将需要覆盖的ControlDesigner每个方法和属性的烦恼。

+0

是的,但这只适用于公众成员。受保护的成员不能像这样访问。 – 2011-05-30 08:25:01

+0

您可以使用反射来处理繁琐的事情,但正如我所说的,这纯粹是最后的选择。 – 2011-05-30 08:29:40

相关问题