none
1 zu 1 Kopie vom Control oder Object... RRS feed

  • 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

    Mittwoch, 29. Februar 2012 08:14

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

    Freitag, 2. März 2012 15:55
  • 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

    Samstag, 3. März 2012 20:27

Alle Antworten

  • Hallo Mario,

    eine neue Klasse erstellen und von Chart ableiten.

    Public class myChart

      inherits Chart

    '  neue Eigenschaften und Methoden hier

    End class

    Gruss Ellen


    Ich benutze/ I'm using VB2008 & VB2010

    Donnerstag, 1. März 2012 19:59
  • 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

    Freitag, 2. März 2012 08:01
  • 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

    Freitag, 2. März 2012 09:56
  • 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

    Freitag, 2. März 2012 15:55
  • 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

    Samstag, 3. März 2012 20:27
  • 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  Twitter Facebook
    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.

    Mittwoch, 7. März 2012 08:45