禁用设计器智能标记和动词以继承控件

时间:2014-07-29 13:44:13

标签: .net winforms

我创建了一个继承自另一个控件的System.Windows.Forms.Control。另一个控件(System.Windows.Forms.DataGridView,在这种情况下,但没关系)有一个smart tag,当控件在设计时被删除时会自动弹出:

enter image description here

随后可点击上面红色圆圈的小箭头。此外,控件在上下文菜单中有各种designer verbs

我的问题是:如何禁用智能标签和设计器动词,以便我可以更好地控制我的控制?

2 个答案:

答案 0 :(得分:3)

您继承的类还从DataGridView继承[Designer]属性。哪个是DataGridViewDesigner类,它包含在设计时将任务列表及其动词添加到控件的代码。如果你想敲掉它,那么你必须替换设计师。

添加对System.Design的引用,并使您的代码看起来类似于:

using System;
using System.ComponentModel;
using System.Windows.Forms;

[Designer(typeof(System.Windows.Forms.Design.ControlDesigner))]
class MyGrid : DataGridView {
    // etc..
}

哪个是控件的香草设计师。或者如果您不喜欢ControlDesigner,也可以使用System.ComponentModel.Design.ComponentDesigner,它根本没有任务列表。

答案 1 :(得分:1)

尝试用您自己的ControlDesigner替换:

[Designer(typeof(GridExDesigner))]
public class GridEx : DataGridView {

  public class GridExDesigner : ParentControlDesigner {
    private DesignerVerbCollection verbs = new DesignerVerbCollection();

    public override void Initialize(IComponent component) {
      base.Initialize(component);
    }

    public override DesignerVerbCollection Verbs {
      get {
        return base.Verbs;
      }
    }
  }
}

确保引用System.Design和以下内容:

using System.ComponentModel.Design
using System.Windows.Forms.Design