2017-10-03 1 views
0

Ich habe DataGridView erweitert. Ich möchte das neue Steuerelement der Toolbox hinzufügen, ohne einen Verweis auf eine andere Assembly hinzuzufügen (mit der rechten Maustaste auf die Option "Elemente auswählen"). Das Steuerelement befindet sich im selben Projekt der Form, und ich möchte sie nicht trennen. Wie kann ich das erreichen?Wie fügt man der Toolbox ein erweitertes Steuerelement hinzu, wenn sich das Steuerelement im selben Projekt befindet?

Danke.

Edit: Dies könnte möglicherweise ein Duplikat einer Frage über Benutzersteuerelemente, wenn es kein Benutzersteuerelement ist.

Edit 2: Der Code selbst (es ist eine unfertige Es ist nicht beendet.):

class BindedDataGrid<T> : DataGridView 
{ 
    public BindedDataGrid() 
    { 
     InitializeComponent(); 

     IEnumerable<PropertyInfo> properties = typeof(T).GetProperties().Where(p => Attribute.IsDefined(p, typeof(BindingValueAttribute))); 

     foreach (PropertyInfo property in properties) 
     { 
      var column = new DataGridViewColumn() 
      { 
       HeaderText = ((property.GetCustomAttributes(true)[0]) as BindingValueAttribute).Value 
      }; 

      Columns.Add(column); 
     } 
    } 
} 
+0

hmm. Es sollte als eine der Projektkomponenten definiert werden. Auf der Registerkarte ProjectName_Components angezeigt .. Ihre Erweiterung von UserControl geerbt? –

+0

@o_O - Diese Frage bezieht sich auf erweiterte Steuerelemente, nicht auf Benutzersteuerelemente. – Sipo

+0

Mein schlecht, [das könnte Ihnen helfen] (https://stackoverflow.com/questions/1116311/how-to-put-an-extended-winforms-control-on-toolbox) –

Antwort

0
public class BindedDataGrid : DataGridView 
    { 
     public BindedDataGrid() 
     { 
     } 

     public BindedDataGrid(Type bindType) 
     { 
      IEnumerable<PropertyInfo> properties = bindType.GetProperties().Where(p => Attribute.IsDefined(p, typeof(BindingValueAttribute))); 

      foreach (PropertyInfo property in properties) 
      { 
       var prop = property.GetCustomAttributes(true)[0]; 
       if (prop is BindingValueAttribute) 
       { 
        var column = new DataGridViewColumn() 
        { 
         HeaderText = property.Name 
        }; 
        column.CellTemplate = new DataGridViewTextBoxCell(); 
        Columns.Add(column); 
       } 
      } 
     } 
    } 

    public class BindingValueAttribute : Attribute 
    { 
     public string Value { get; set; } 
    } 

    public class BindOne 
    { 
     [BindingValueAttribute()] 
     public string Name { get; set; } 

     [BindingValueAttribute()] 
     public int Age { get; set; } 
    } 
  1. allererst BindedDataGrid keine machen Generika
  2. eine nicht erstellen parametrisierter Konstruktor

    private void InitializeComponent() 
    { 
        this.bindedDataGrid1 = new PlayingWithThread.BindedDataGrid(typeof(BindOne)); 
        ((System.ComponentModel.ISupportInitialize)(this.bindedDataGrid1)).BeginInit(); 
    
Verwandte Themen