Für eine bessere Übersichtlichkeit in meiner Applikation möchte ich
Klassen erstellen, die in jedem Fenster (Form) verwendet werden kann.
Zum Beispiel sollen alle Funktionalitäten in der ChartPlot Klasse
abgelegt werden. In der jetzigen Applikation habe ich zwei Fenster
(Form).
Im Fenster 1 sowie im Fenster 2 wird ein ChartPlot benutzt. die
Objektnamen sind unterscheidlich chartPlot1 und chartPlot2. In dem
Fenster 1 habe ich bisher alle Funktionen für den chartPlot1
bereitgestellt. Diese sollen auch für den chartPlot2 benutzt werden. Was
müsste die Klasse implementiert werden, das wenn ich eine Instanz von
der Klasse chartPlot anlege auch auf das Objekt chartPlot1 sowie auf das
Objekt chartPlot2 zugreifen kann?
Fenster 1:
Programmierer schrieb:> Zum Beispiel sollen alle Funktionalitäten in der ChartPlot Klasse> abgelegt werden.
Ich sehe prinzipiell drei Möglichkeiten:
1) Du leitest ein eigenes Control ("MyChartPlot") von ChartPlot ab, dass
diese Klasse um die von Dir benötigte Funktionalität erweitert. Dann
kannst Du in allen Fenstern das MyChartPlot anstelle des regulären
ChartPlot verwenden.
2) Du erstellst eine Hilfsklasse, der du eine ChartPlot Instanz
übergeben kannst. Die Hilfsklasse kann dann verschiedene Dinge mit dem
ChartPlot anstellen (Es konfigurieren, Daten einfügen etc.).
3) Du erweiterst die bestehende Klasse ChartPlot mit Extension Methods.
Damit kannst Du der Klasse zusätzliche Funktionalität verpassen.
Da ich nicht genau weiß, was Du vorhast, kann ich Dir nicht sagen, was
für Dich der sinnvollste Weg wäre...
Ich habe eine Anwendung mit zwei Fenstern. In jedem Fenster habe ich ein
chartPlot eingefügt zur Visualisierung von Daten.
Im ersten Fenster Form1 habe ich bisher Methoden implementiert, für die
Initialisierung, Zeichnen, Skalierung von Achsen. Diese Funktionen
sollen nun in einer eigenen Klasse enthalten sein. Nur durch eine
Instanzierung soll auf diese Methoden zugegriffen werden können.
jede Form hat im Designer nun diese Zeilen enthalten:
Form1:
Na, dann versuch es doch mal mit Weg 1).
Erstelle eine Klasse MyChartPlot und lasse die vom ChartPlot erben.
Dann baust die Funktionen aus der Form dort ein.
Wenn du dein Projekt dann das erste mal kompilierst, taucht dein
MyChartPlot nun in der Forms-Designer Toolbox als neues Control auf.
Dann kannst du das alte ChartPlot rauswerfen, und dein Control dafür
einfügen.
Vielen Dank für deine Hilfe!
Wenn ich den Weg 1 umsetze, müsste ich in meiner C# Applikation zunächst
ein neues Element vom Namen Schnittstelle hinzugügen?
Der Fehler ist ja eher trivialer Natur. Die Meldung sagt ja auch schon
alles: du must den Namespace "usen", aus dem die ChartPlot Klasse kommt.
Sonst weiß der Kompiler nicht, was du meinst.
Versuch mal einen Rechtsklick auf das "ChartPlot". Visual Studio sollte
dir dann automatisch Hilfe ("Auflösen") anbieten, um das Using für dich
einzufügen.
Ich hatte jetzt aber nicht vor, das Programm für dich zu schreiben.
Eigne dir erst mal ein paar Grundlagen an (C# Tutorials sollte es ja zu
Hauf geben). Dann sollten solche grundlegenden Problemchen auch kein
Problem mehr für dich darstellen...
Programmierer schrieb:> Wenn ich in meiner zweiten Form eine InstanzMChartPlot _Plot = new> MyChartPlot();
Warum fügst du den Chart nicht einfach im Designer deiner Form hinzu?
Manuell im Code anlegen solltest du ihn nicht.
Programmierer schrieb:> Ein Diagrammelement mit dem Namen 'Chart' konnte in> 'ChartAreaCollection' nicht gefunden werden.
Joar, in deinem Constructor greifst du auf ChartAreas["Chart"] zu. Die
ChartAreas sind aber natürlich am Anfang leer. Eine Chart Area namens
"Chart" gibt es also nicht...
Programmierer schrieb:> Wie kan eine Verknüpfung zwischen public> System.Windows.Forms.DataVisualization.Charting.Chart chartPlot2;> und der Klasse MyChartPlot hergestellt werden?
Ändere doch einfach den Datentyp von
System.Windows.Forms.DataVisualization.Charting.Chart in deine
MyChartPlot Klasse. (Musst du vermutlich an zwei stellen im Designer.cs
anpassen).
Vorher aber unbedingt den Bug in deinem Konstruktur fixen, sonst lässt
sich die Form nicht mehr mit dem Designer öffnen.
Das mit MyChartPlot Klasse funktioniert. Allerdings habe ich nur Zugriff
auf die Methoden und Eigenschaften von Chart und nicht auf ChartAreas,
Legend sowie Series.Wenn ich das Steuerelement in der Toolbox auf meine
Form ziehe, dann sehe ich nur eine Instanz von chartArea1. Ich benötige
in dem ChartPlot noch ein chartArea2, Legend und Series.
Sobald ich das Element auf meine Form ziehe, wird automatisch diese
Zeile eingefügt:
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 =
new System.Windows.Forms.DataVisualization.Charting.ChartArea();
Programmierer schrieb:> Fehlermeldung:> Ein Diagrammelement mit dem Namen 'ChartArea1' ist bereits in> 'ChartAreaCollection' vorhanden.>> Funktioniert nicht!
Warum willst du auch zwei Areas mit dem gleichen Namen hinzufügen?
Tztztz ;-)
Wenn man weiß wie es geht ist es immer einfach. Es muss mit Sicherheit
in der Klasse von MyChartControl liegen.
Da müsste man das ganze beeinflussen können. Aber nur wie?
Programmierer schrieb:> Wie kann ich die automatisch generierte Zeile beeinflussen?
Das Chart Control generiert beim Erstellen automatisch eine ChartArea,
eine Legende etc.
Wenn du die nicht haben willst, kannst du sie ganz einfach im Designer
löschen.
Eine eigene Frage?
Dieser Thread ist über 11 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.