2009-08-15 22 views
6

Sehen Sie sich das folgende Bild an, das ein Smart-Tag für DataGridView zeigt.Wie füge ich intelligente Tags zu meiner .NET-Komponente hinzu?

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

Jetzt bin ich die Schaffung einer neuen Komponente, und ich möchte es zeigt einige Eigenschaften in Smart Tags zu unterstützen. Wie füge ich dem Smarttag die Eigenschaften hinzu?

+1

Das ist ein großes Thema ist. Hat Ihre Komponente gerade Designerunterstützung? –

+0

Danke, um die Frage zu vereinfachen, lassen Sie uns sagen, dass ich numerische Textfeld habe, und ich möchte die numerische Eigenschaft enable/disable zu Smart-Tag hinzufügen. –

+1

Vielen Dank * Sie *, aber das hat meine Frage nicht beantwortet. Hat Ihre Komponente derzeit Designer-Unterstützung? –

Antwort

2

Sie können den folgenden Code verwenden, um ein Beispiel-Tag in einem benutzerdefinierten Steuerelement anzuzeigen.

Und Sie können ein Video über das von www.windowsclient.com bekommen.


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

Ich verwendete http://msdn.microsoft.com/en-us/library/default.aspx?q=smart+tag+windows+forms+designer.

Als Ergebnis habe ich Walkthrough: Adding Smart Tags to a Windows Forms Component gefunden.

Wer die gleiche Suche durchführt, findet den gleichen Artikel.


Update: Dieser Link funktioniert nicht mehr. Ich habe gerade eine Suche nach "smart tag windows forms designer" versucht und "Walkthrough: Adding Smart Tags to a Windows Forms Component" als den ersten Suchtreffer gefunden. Die gleiche Suche in Google zeigt "How to: Attach Smart Tags to a Windows Forms Component" als den ersten Treffer, aber zeigt den gleichen Walkthrough wie der zweite Treffer.

+2

Oh, komm schon! Sind die Downvotes dafür, dass er die gleichen zwei Minuten wie ich verbrachte? –

+2

-1 Sehr nicht hilfreich und herablassend. – Pwninstein

+7

Ja. Denken Sie darüber aus der Sicht des Fragestellers nach - es gibt einen Weg mehr Wert darin, 30 Sekunden lang eine Frage vor Tausenden von Experten zu stellen, als in 2 Minuten, die vielleicht überhaupt keine Hilfe bringen. Dafür sind wir da. Grobheit beeinträchtigt eine ansonsten hilfreiche Antwort. –

Verwandte Themen