VB.NET: Chart Control von einem Form in ein weiteres Form übertragen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von SlurmMcKenzie.

    VB.NET: Chart Control von einem Form in ein weiteres Form übertragen

    Hallo Zusammen,

    ich habe mir ein (Übersicht) Formular (frmStatistik) mit mehreren MS Chart Controls erstellt. Nun möchte ich per Doppelklick auf eines dieser Charts ein weiteres Form (frmChartDetail) öffnen, in welchem das gewählte Chart alleine und vollflächig dargestellt wird.

    Soweit habe ich das auch schon hinbekommen, aber wenn ich das Form (frmChartDetail) wieder schließe ist das Chart auf dem Ursprungsformular (frmStatistik) verschwunden...

    Realisiert habe ich das ganze folgendermaßen:

    Der Aufruf der Detailansicht erfolgt über das (Übersichts) Formular (frmStatistik):

    VB.NET-Quellcode

    1. Private Sub chartNIOStatistik_DoubleClick(sender As Object, e As EventArgs) Handles chartNIOStatistik.DoubleClick
    2. frmChartDetail.myChart = chartNIOStatistik
    3. frmChartDetail.Show()
    4. End Sub



    Das Formular für die Detailansicht (frmChartDetail) besteht nur aus einem blanken Formular mit folgenden Codeinhalt:

    VB.NET-Quellcode

    1. Imports System.Windows.Forms.DataVisualization.Charting
    2.  
    3. Public Class frmChartDetail
    4. Dim _myChart As Chart
    5. Public Property myChart As Chart
    6. Get
    7. Return _myChart
    8. End Get
    9. Set(value As Chart)
    10. _myChart = value
    11. End Set
    12. End Property
    13. Private Sub frmChartDetail_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    14. myChart.Dock = DockStyle.Fill
    15. Me.Controls.Add(myChart)
    16.  
    17. End Sub
    18. End Class



    Kann mir bitte jemand sagen wo mein Fehler liegen könnte bzw. was ich falsch mache...?
    @SlurmMcKenzie Willkommen im Forum. :thumbup:
    Wenn Du ein Control an eine andere Form übertragen willst, musst Du dem Control ein neues Parent zuweisen: docs.microsoft.com/de-de/dotne…l.parent?view=netcore-3.1
    das ist jedoch nicht zu empfehlen.
    Du müssterst das Control clonen, zumindest den Daten-Anteil, die Properties, die das Control in die Form einbetten, darfst Du dabei nicht ändern!
    Praktikabel wäre eine Shared Prozedur, der Du das Control und die Daten übergibst und dort werden die Daten in das Control eingetragen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich würde es eher so machen, dass die Daten übergeben werden und ein neues Chart aufgebaut wird. Den Chartaufbaucode hast Du ja. Du musst ihn quasi nur nochmal in geeigneter Weise aufrufen. Eine Alternative zur letzten Textzeile von RfG.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Chart-Aufbaucode?
    Man kann ein Chart im Designer designen, und per Databinding befüllen - AufbauCode entfiele dann, und Befüllen wäre 1 Zeile Code.
    Chart - Sample
    Das designete Chart könnte man im Designer des MainForms kopieren und im DetailForm-Designer einpasten.
    Dann wie gesagt einfach das Databinding übertragen

    VB.NET-Quellcode

    1. frmDetail.Chart1.DataSource = Me.Chart1.DataSource
    und feddich.



    Aber nochmal zum "Fehler". Die Zeile

    SlurmMcKenzie schrieb:

    VB.NET-Quellcode

    1. Me.Controls.Add(myChart
    Fügt das Chart in die Controls des DetailForms ein (steht da ja).
    Dadurch wird es automatisch aus den Controls des MainForms entfernt (so ist das bei ControlCollections).
    Ja, wenn du später das DetailForm schliesst, ist das Chart natürlich weg, weil die Controls eines geschlossenen Forms sind numal weg.

    Das nur zur Erläuterung des Verhaltens.
    (Als direkte Lösung könnte man sich nun einfallen lassen, das Chart vorm Schliessen wieder genau dahin zurückzubefördern, wo es herkam - das wäre auch nur wenig Code.
    Aber vonne Architektur her wäre das sehr ungewöhnlich, ja fast abartig.
    Hingegen - wenn da viele so Charts herumfahren - aber unterschiedlich designed, dann könnte man das tatsächlich als Konzept ins Auge fassen)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()