2009-08-15 10 views
6

Regardez l'image suivante, qui affiche une balise active pour DataGridView.Comment ajouter des balises actives à mon composant .NET?

DataGridView Smart Tags http://img199.imageshack.us/img199/5871/post517531249536112.jpg

Maintenant, je suis la création d'un nouveau composant, et je veux qu'il soutenir montrant des propriétés dans les balises intelligentes. Comment ajouter les propriétés à la balise active?

+1

C'est un grand sujet. Est-ce que votre composant a un support de concepteur en ce moment? –

+0

Merci, pour simplifier la question, disons que j'ai une zone de texte numérique, et je veux ajouter la propriété enable/disable numeric à la balise active. –

+1

Merci * vous *, mais cela n'a pas répondu à ma question. Votre composant a-t-il actuellement un support de concepteur? –

Répondre

2

Vous pouvez utiliser le code suivant pour afficher un exemple de point dans un contrôle personnalisé.

Et vous pouvez obtenir une vidéo à ce sujet sur www.windowsclient.com.


using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Text; 
using System.Windows.Forms; 
using System.ComponentModel.Design; 
namespace MakeSmartTag 
{ 
    public enum Languages 
    { 
     English, 
     Arabic, 
     Japanese 
    } 

    [Designer(typeof(UserControlDesigner))] 
    public partial class UserControl2 : UserControl 
    { 
     public UserControl2() 
     { 
      InitializeComponent(); 
     } 

     private Languages _language; 

     public Languages Language 
     { 
      get { return _language; } 
      set 
      { 
       switch (value) 
       { 
        case Languages.Arabic: 
         { 
          label1.Text = "مرحباً"; 
          _language = value; 
         } 
         break; 
        case Languages.English: 
         { 
          label1.Text = "Hello"; 
          _language = value; 
         } 
         break; 
        case Languages.Japanese: 
         { 
          label1.Text = "Conechoa"; 
          _language = value; 
         } 
         break; 
       } 
      } 
     } 
    } 

    public class UserControlDesigner : System.Windows.Forms.Design.ControlDesigner 
    { 
     private DesignerActionListCollection lists; 
     public override DesignerActionListCollection ActionLists 
     { 
      get 
      { 
       if (lists == null) 
       { 

        lists = new DesignerActionListCollection(); 
        lists.Add(new UserControlActioonList(this.Component)); 
       } 
       return lists; 
      } 
     } 
    } 

    public class UserControlActioonList : DesignerActionList 
    { 
     private UserControl2 myUserControl; 
     private DesignerActionUIService designerActionSvc = null; 

     public UserControlActioonList(IComponent component) 
      : base(component) 
     { 
      this.myUserControl = (UserControl2)component; 

      this.designerActionSvc = 
       (DesignerActionUIService)GetService(typeof(DesignerActionUIService)); 
     } 

     private PropertyDescriptor GetPropertyByName(string propName) 
     { 
      PropertyDescriptor prop = default(PropertyDescriptor); 
      prop = TypeDescriptor.GetProperties(myUserControl)[propName]; 
      if (prop == null) 
      { 
       throw new ArgumentException("Invalid Property", propName); 
      } 
      else 
      { 
       return prop; 
      } 
     } 

     public override System.ComponentModel.Design.DesignerActionItemCollection GetSortedActionItems() 
     { 
      DesignerActionItemCollection item = new DesignerActionItemCollection(); 
      item.Add(new DesignerActionHeaderItem(
         "المظهر")); 
      item.Add(new DesignerActionPropertyItem(
         "BackColor", "لون الخلفية", "Appearance", "Set background Color of the control")); 
      item.Add(new DesignerActionHeaderItem("تحديد اللغة")); 
      item.Add(new DesignerActionPropertyItem(
         "Language", "اللغة", "Functions", "Set the language of the control")); 
      return item; 
     } 

     public Color BackColor 
     { 
      get { return this.myUserControl.BackColor; } 
      set { GetPropertyByName("BackColor").SetValue(myUserControl, value); } 
     } 

     public Languages Language 
     { 
      get { return this.myUserControl.Language; } 
      set { GetPropertyByName("Language").SetValue(myUserControl, value); } 
     } 
    } 
} 
5

J'ai utilisé http://msdn.microsoft.com/en-us/library/default.aspx?q=smart+tag+windows+forms+designer. Par conséquent, j'ai trouvé Walkthrough: Adding Smart Tags to a Windows Forms Component. Tous ceux qui effectuent la même recherche trouveront le même article.


Mise à jour: Ce lien ne fonctionne plus. J'ai juste essayé une recherche pour "smart tag windows forms designer", et ai trouvé "Walkthrough: Adding Smart Tags to a Windows Forms Component" comme premier coup de recherche. La même recherche dans Google montre "How to: Attach Smart Tags to a Windows Forms Component" comme le premier coup, mais montre la même Procédure pas à pas comme le deuxième coup.

+2

Oh, allez! Est-ce que les downvotes pour suggérer qu'il passe les mêmes deux minutes que j'ai fait? –

+2

-1 Très inutile et condescendant. – Pwninstein

+7

Oui. Pensez-y du point de vue du demandeur - il y a * plus * de valeur à consacrer 30 secondes à poser une question à des milliers d'experts qu'à 2 minutes qui peuvent ou ne peuvent pas apporter d'aide du tout. C'est ce pour quoi nous sommes ici. Rudeness détourne d'une réponse autrement utile. –

Questions connexes