如何在不禁用现有设计器功能的情况下向控件添加设计器谓词?

时间:2011-05-27 09:29:41

标签: c# .net

我创建了一个源自TextBox的自定义文本框控件。

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

TextBoxDesigner类设置为internal,因此无法从中获取我的设计师。

我做错了什么?

是否有其他方法可以在不破坏现有功能的情况下将设计时功能添加到派生控件中?

1 个答案:

答案 0 :(得分: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的每个方法和属性。