Benutzer mit den meisten Antworten
1 zu 1 Kopie vom Control oder Object...

Frage
-
Hallo,
Tante Google hat zwar ein paar Ergebnisse geliefert, aber leider keines was wirklich funktioniert. Ich hab ein recht komplexes auch durch den Anwender angepasstes Chart Control. Dieses muss ich nun drucken, per email versenden etc. das ist nicht das Problem. Ich möchte nur ein paar weitere Angaben in den Chart für die Druckaufbereitung machen. Wie kann ich das bestehende Control mit all seinen Einstellungen und Daten einfach auf ein anderes Object kopieren etwas verändern ohne das das ursprüngliche Chart verändert wird... gibts da so was wie Chart.Clone() ?
bye,
Mario
Antworten
-
Hallo Mario,
ich habe einen passenden code gefunden. Im Prinzip wird ein Steuerelement serialisiert, in die Zwischenablage kopiert und als clone neu aufgebaut:
http://www.codeproject.com/Articles/12976/How-to-Clone-Serialize-Copy-Paste-a-Windows-Forms
Vielleicht hilft Dir das weiter.
schöne Grüsse Ellen
Ich benutze/ I'm using VB2008 & VB2010
- Als Antwort markiert Robert Breitenhofer Mittwoch, 7. März 2012 08:44
-
Hallo,
das Chart Control hat ein Serializer Property welchens auf ein ChartSerializer Objekt verweist. Dieses kann zum Speichern, Lesen und Kopieren des Chart Controls verwendet werden.
Imports System.Windows.Forms.DataVisualization.Charting
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ctrChartCopy As Chart
Dim fs As FileStream
Try
fs = New FileStream("ChartFile.dat", FileMode.Create)
' Speichern von Chart1.
Chart1.Serializer.Save(fs)
ctrChartCopy = New Chart
' Die Chartkopie mit den Eigenschaften von Chart1 füllen.
ctrChartCopy.Serializer.Load(fs)
Me.Controls.Add(ctrChartCopy)
ctrChartCopy.Top = ctrChartCopy.Top + 200
Catch ex As Exception
MsgBox(ex.Message)
Finally
If fs IsNot Nothing Then fs.Close()
End Try
End Sub
End Class
- Als Antwort markiert Robert Breitenhofer Mittwoch, 7. März 2012 08:44
Alle Antworten
-
Hallo Ellen,
dann vieleicht noch mal zur verdeutlichung :)
Ich hab ein bestehendes Chartcontrol auf der Form was der Benutzer zur Laufzeit stark verändern kann und auch die Dateninhalte verändern sich. Nun soll dieses Diagramm ausgedruckt werden. Da ich es jetzt größer darstellen muss auf dem Ausdruck und auch noch ein paar andere Farbbestimmungen vornehmen muss kann ich das nicht auf dem orginalen Chart machen, sondern wollte mir dieses bestehende zur Laufzeit kopieren und für den Ausdruck anpassen und ausdrucken...
Eine Vererbung über eine Klasse wird da nicht gehen, es sei denn ich kann eine Klasse auch zur Laufzeit erzeugen .)
bye,
Mario
-
Eine Vererbung über eine Klasse wird da nicht gehen, es sei denn ich kann eine Klasse auch zur Laufzeit erzeugen .)
bye,
Mario
Hi Mario,
das kam in Deiner Frage nicht so deutlich rüber. Also mir ist keine Control.copy oder Control.clone Methode bekannt, mit deren Hilfe man von einem Steuerelement mit allen seinen Eigenschaften eine flache Kopie erstellen kann. Noch mal bei US geschaut. Da auch nichts gefunden.
Mein Vorschlag wäre gleich eine 2te Instanz von Chart zu erzeugem mit der Eigenschaft .visible = False. Alle Änderungen im ersten Chart sind dort parallel mitzuführen vom user. Und dann kommst Du und benutzt dieses zum Drucken
Was meinst Du?
Gruss Ellen
Ich benutze/ I'm using VB2008 & VB2010
-
Hallo Mario,
ich habe einen passenden code gefunden. Im Prinzip wird ein Steuerelement serialisiert, in die Zwischenablage kopiert und als clone neu aufgebaut:
http://www.codeproject.com/Articles/12976/How-to-Clone-Serialize-Copy-Paste-a-Windows-Forms
Vielleicht hilft Dir das weiter.
schöne Grüsse Ellen
Ich benutze/ I'm using VB2008 & VB2010
- Als Antwort markiert Robert Breitenhofer Mittwoch, 7. März 2012 08:44
-
Hallo,
das Chart Control hat ein Serializer Property welchens auf ein ChartSerializer Objekt verweist. Dieses kann zum Speichern, Lesen und Kopieren des Chart Controls verwendet werden.
Imports System.Windows.Forms.DataVisualization.Charting
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ctrChartCopy As Chart
Dim fs As FileStream
Try
fs = New FileStream("ChartFile.dat", FileMode.Create)
' Speichern von Chart1.
Chart1.Serializer.Save(fs)
ctrChartCopy = New Chart
' Die Chartkopie mit den Eigenschaften von Chart1 füllen.
ctrChartCopy.Serializer.Load(fs)
Me.Controls.Add(ctrChartCopy)
ctrChartCopy.Top = ctrChartCopy.Top + 200
Catch ex As Exception
MsgBox(ex.Message)
Finally
If fs IsNot Nothing Then fs.Close()
End Try
End Sub
End Class
- Als Antwort markiert Robert Breitenhofer Mittwoch, 7. März 2012 08:44
-
Hallo M. Schulz,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.