Es ist möglich, alle Eigenschaften eines bestimmten Controls zu kopieren? (C # Fensterformen)

8

Ich habe zum Beispiel einen DataGridView -Steuerelement mit einer blauen BackgroundColor -Eigenschaft usw., gibt es eine Möglichkeit, diese Eigenschaften programmatisch auf ein anderes DataGridView -Steuerelement zu übertragen oder zu übergeben?

In etwa so:

%Vor%

Danke ...

    
yonan2236 13.08.2010, 03:01
quelle

7 Antworten

4

Sie müssen Reflektion verwenden.

Sie greifen eine Referenz auf jede Eigenschaft in Ihrer Quellcodeverwaltung (basierend auf ihrem Typ), dann "holen" Sie ihren Wert - und weisen diesen Wert Ihrem Ziel-Steuerelement zu.

Hier ist ein grobes Beispiel:

%Vor%     
Stuart Helwig 13.08.2010, 03:38
quelle
2

Sie können Reflektion verwenden, um alle öffentlichen Eigenschaften des Typs abzurufen und die Werte von einer Instanz in eine andere zu kopieren. Dies ist jedoch gefährlich und kann nicht den gesamten Status des Objekts duplizieren. Möglicherweise sind einige Eigenschaften, die Sie nicht kopieren möchten (z. B. Parent, Site), und andere wichtige Eigenschaften, die Sie nicht direkt festlegen können (z. B. Spalten, Zeilen). Es könnte auch Eigenschaften geben, die Referenztypen sind. Ihr kopiertes Steuerelement verweist dann auf dasselbe Objekt wie Ihr Original, was unerwünscht sein könnte. Es könnte auch Statusinformationen geben, die nur über Methodenaufrufe gesetzt werden können, die nicht auf diese Weise kopiert werden. Kurz gesagt, Reflexion ist wahrscheinlich nicht die Lösung, die Sie suchen.

Sie müssen nur die gewünschten Eigenschaften manuell kopieren. Alternativ können Sie eine Factory-Methode erstellen, die eine beliebige Anzahl ähnlicher Grids erstellen kann.

    
Kevin Kibler 13.08.2010 03:21
quelle
2

Ich habe vor einigen Jahren ein Demo-Projekt über Codeprojekt zum Kopieren, Einfügen und Klonen eines Contorls veröffentlicht. Ссылка

    
lxwde 18.10.2013 05:40
quelle
1

Hier ist der Code, den ich mir ausgedacht habe. Ich habe es nur mit den Steuerelementen Label, TextBox, Panel und DataGridView getestet. Für ein Panel-Steuerelement erhalten Sie alle enthaltenen Steuerelemente (geklonte Instanzen). Für ein DataGridView-Steuerelement erhalten Sie die Datenbindung und es sind genau dieselben Daten, die an das DataGridView-Quellsteuerelement gebunden sind. Wenn es keine Bindung gibt, hat die geklonte Instanz natürlich keine Bindung. Ob diese Verhaltensweisen wünschenswert sind oder nicht, hängt von Ihren Bedürfnissen ab.

%Vor%     
TxCsharper 18.01.2017 18:49
quelle
0

Ich habe diesen Code verwendet, um die Kontrolle zu klonen, weil ich nur ausgewählte Eigenschaften kopieren möchte.

%Vor%     
Manish Nayak 27.12.2016 12:01
quelle
0

Basierend auf diesem Beitrag ist hier eine Version, die

  • erstellt die richtigen Steuerelementtypen und
  • tut dies rekursiv
%Vor%

Sie möchten immer noch testen, ob mehr als die WindowTarget -Eigenschaft herausgefiltert werden sollte.

Lustig beiseite: Wenn das zu klonende Steuerelement (ein) nicht ausgewählt TabPage ist, wird es unsichtbar sein.

    
TaW 31.05.2017 10:29
quelle
0

Ich habe das benutzt:

%Vor%     
elle0087 24.10.2017 12:30
quelle

Tags und Links