Hilfe bei Diagramm-Klasse
-
Hallo zusammen,
ich habe nochmal eine Frage. Und zwar habe ich ihn meinem Programm zwei Diagramme (ein Linien- und ein Kreisdiagramm). Den Code dazu habe ich selber geschrieben. Diesen würde ich gerne in eine Klasse auslagern, damit er leichter wiederverwendet werden kann. Mein Problem ist dann allerdings, dass ich in einer anderen Klasse gar keinen Zugriff auf die PictureBox habe, in die das Diagramm gezeichnet wird.
Wie bekomme ich möglichst elegant Zugriff von einer Klasse auf eine PictureBox in einer anderen Klasse (=anderes Form).Und dann noch ein kleineres Problem, das sicherlich auch lösbar ist: Ein Diagramm ist gezeichnet. Wenn nun das Form minimiert und anschließend wieder angezeigt wird, ist das Diagramm verschwunden.
Dass das Form neu gezeichnet wird, nachdem es verschwunden war ist mir bekannt. Aber wie kann ich am besten, den Zustand von vorher wieder herstellen?Vielen Dank für eure Antworten und viele Grüße,
Lukas
-
Du hast schon mal etwas von Properties (Eigenschaften) gehört, oder?
Erzeuge einfach für die PictureBox ein entsprechendes Property.Un zum Zeichnen in eine PictureBox solltest du nur das Paint-Ereignis abonnieren und in der Methode dann deinen Code schreiben.
(Niemals von außen direkt auf ein Control zeichnen!)Und nun brauchst du nur beides zu kombinieren...
-
Hey!
Danke für deine Hilfe. Ich konnte leider über das Wochenende nicht antworten.
Das abonnieren habe ich verstanden:
picBox.Paint += Diagram.paintLineDiagramm;
Aber wie kann ich die Zugriffsprobleme mit Properties lösen? Ich habe bspw. das Problem, dass ich die Visible-Eigenschaft der PictureBox verändern will. Den Code dazu habe ich eigentlich:
public bool LineDiagram_PicBox { get { return pbLineDiagram.Visible; } set { pbLineDiagram.Visible = value; } }
Aber um von meiner Diagrammklasse aus, auf diese Property (in der Main-Klasse) zugreifen zu können, muss ich einen Objektverweis auf die aktuelle Instanz der Main-Klasse haben. Woher bekomme ich diesen? Ich habe auf MSDN und bei Google nichts gefunden
Vielen Dank und viele Grüße,
Lukas
-
Unterklassen sollten niemals auf Formulare direkt zugreifen, d.h. deine Vorgehensweise ist genau falsch herum.
Wenn du willst, daß von der Diagrammklasse aus Aktionen passieren sollen, dann mußt du hierfür ein eigenes Event definieren und dann von der Formularklasse abonnieren:
class Diagram { public delegate void MyEventHandler(object sender, EventArgs e); public event MyEventHandler MakeVisible; public void MyMethod() { if(MakeVisible != null) // Abfrage, ob mindestens ein Abonnement vorliegt MakeVisible(this, new EventArgs()); } }
Nun einfach dieses Event von der Formularklasse aus abonnieren.
Wenn du noch weitere Parameter übergeben willst, dann mußt du dafür eine eigene EventArgs-Klasse erzeugen und diese dann verwenden.Wobei ich generell Zweifel habe, ob es sinnvoll ist, daß die Diagrammklasse die drüberliegende Picturebox beeinflussen soll (Sichtbarkeit ändern).