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 ...
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%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.
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%Ich habe diesen Code verwendet, um die Kontrolle zu klonen, weil ich nur ausgewählte Eigenschaften kopieren möchte.
%Vor%Basierend auf diesem Beitrag ist hier eine Version, die
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.