2016-06-04 1 views
1

Je suis en train de développer un ToolStrip personnalisé pour remplacer la barre de titre d'un formulaire que je veux aussi doubler en tant que barre de menus. Ce que j'essaye de faire est d'ajouter un verbe au menu de verbes ToolStrips qui ajoutera des articles de menu standard tels que le dossier, éditent.Ajouter un verbe personnalisé au concepteur ToolStrip sans avoir à réimplémenter le ToolStripDesigner

Je peux le faire via un Custom ControlDesign, mais les éléments Ajouter ne sont pas conservés dans la méthode InitializeComponent du formulaire. Aussi je ne pense pas que je veuille utiliser un ControlDesigner personnalisé parce que je perds beaucoup de fonctionnalités que je devrai réécrire et le ToolStripDesigner est interne donc je ne peux pas hériter de cela.

Est-il possible d'ajouter une option au menu ToolStrips Verbs similaire aux éléments standard Insert sans avoir à réorganiser le ToolStripDesigner.

Merci pour toute aide Danny

PS Désolé si cela est un peu décousu, je ne l'ai pas dormi dans 2 jours.

+0

Vous ne devez pas créer un nouveau Concepteur de contrôles car vous perdrez les fonctionnalités actuelles du concepteur d'outils, comme l'ajout d'éléments à l'aide de Designer. Au lieu de cela, vous devez ajouter la fonctionnalité dont vous avez besoin au concepteur. D'autre part, le concepteur de tooltrip actuel est interne et a des dépendances avec les autres classes internes et vous ne pouvez pas en hériter. Une bonne option consiste à trouver le concepteur et manipuler le concepteur au moment de la conception. –

+0

Reza comment pourrais-je manipuler le designer au moment du design? – dannyhut

Répondre

1

ToolStripDesigner est interne et possède des dépendances par rapport aux autres classes internes et vous ne pouvez pas en hériter. En outre, vous ne devez pas créer un nouveau concepteur de contrôle pour ToolStrip car vous perdrez les fonctionnalités de conception actuelles, telles que l'ajout d'éléments à l'aide du concepteur.

Un très bon astuce trouve le concepteur et manipulez le concepteur au moment du design.

Comment ajouter un verbe personnalisé au concepteur ToolStrip sans perdre les fonctionnalités du concepteur?

Vous pouvez trouver le concepteur de votre contrôle au moment du design et le manipuler. Un bon point est dans la méthode OnHandleCreated. Vous pouvez obtenir une instance de IDesignerHost à partir du Site du contrôle, puis obtenir le concepteur. Ensuite, vous pouvez obtenir la liste des actions du contrôle et ajouter un verbe personnalisé.

/*Add a reference to System.Design.dll*/ 

using System; 
using System.ComponentModel.Design; 
using System.Windows.Forms; 
using System.Windows.Forms.Design; 
public class MyCustomToolStrip : ToolStrip 
{ 
    private IDesignerHost designerHost; 
    protected override void OnHandleCreated(EventArgs e) 
    { 
     base.OnHandleCreated(e); 
     if (this.DesignMode && Site != null) 
     { 
      designerHost = Site.GetService(typeof(IDesignerHost)) as IDesignerHost; 
      if (designerHost != null) 
      { 
       var designer = designerHost.GetDesigner(this); 
       if (designer != null) 
       { 
        var actionList = ((ControlDesigner)designer).ActionLists[0]; 
        designer.Verbs.Add(new DesignerVerb("My Custom Verb", MyCustomVerb)); 
       } 
      } 
     } 
    } 
    private void MyCustomVerb(object sender, EventArgs e) 
    { 
     MessageBox.Show("My Custom Verb added!"); 
    } 
} 
+0

Merci Reza, je vais essayer dans la matinée. – dannyhut

+0

@dannyhut Vous êtes les bienvenus :) Faites-moi savoir si vous avez des questions sur la réponse. –

+0

@dannyhut Tester la validité de la réponse est vraiment facile. Avez-vous un problème avec l'application de la solution? Faites-moi savoir le résultat ... –