2010-11-15 3 views

Répondre

3

Vous devez créer votre propre concepteur pour votre contrôle. Commencez par ajouter une référence à System.Design. Un exemple de contrôle peut ressembler à ceci:

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

[Designer(typeof(MyControlDesigner))] 
public class MyControl : Control { 
    public bool Prop { get; set; } 
} 

Remarquez l'attribut [Designer], il définit le concepteur de contrôle personnalisé. Pour obtenir le vôtre, dérivez votre propre concepteur à partir de ControlDesigner. Remplacer la propriété ActionLists pour créer la liste des tâches pour le concepteur:

internal class MyControlDesigner : ControlDesigner { 
    private DesignerActionListCollection actionLists; 
    public override DesignerActionListCollection ActionLists { 
     get { 
      if (actionLists == null) { 
       actionLists = new DesignerActionListCollection(); 
       actionLists.Add(new MyActionListItem(this)); 
      } 
      return actionLists; 
     } 
    } 
} 

Maintenant, vous devez créer votre ActionListItem personnalisé, qui pourrait ressembler à ceci:

internal class MyActionListItem : DesignerActionList { 
    public MyActionListItem(ControlDesigner owner) 
     : base(owner.Component) { 
    } 
    public override DesignerActionItemCollection GetSortedActionItems() { 
     var items = new DesignerActionItemCollection(); 
     items.Add(new DesignerActionTextItem("Hello world", "Category1")); 
     items.Add(new DesignerActionPropertyItem("Checked", "Sample checked item")); 
     return items; 
    } 
    public bool Checked { 
     get { return ((MyControl)base.Component).Prop; } 
     set { ((MyControl)base.Component).Prop = value; } 
    } 
} 

Construire la liste dans la méthode GetSortedActionItems est la clé pour créer votre propre panneau d'élément de tâche.

Voilà la bonne version. Je devrais noter que j'ai écrasé Visual Studio sur le bureau trois fois tout en travaillant sur cet exemple de code. VS2008 est et non résilient aux exceptions non gérées dans le code du concepteur personnalisé. Sauvez souvent. Le débogage du code temporel de conception nécessite le démarrage d'une autre instance de VS qui peut arrêter le débogueur sur les exceptions de conception.

Questions connexes