Entwickler-Ecke
Basistechnologien - Übergabe und Weitergabe von Feldern
Talemantros - Sa 23.11.13 00:36
Titel: Übergabe und Weitergabe von Feldern
Hallo zusammen,
ich habe ein Feld
Dieses wird im Laufe des Programms mit diversen .Width etc und Farbe verändert.
An einem Button möchte ich in einem neuen Form den aktuellen Zustand anzeigen lassen
Dazu rufe ich ein neues Form auf und wollte unter anderem den Stift überegben
C#-Quelltext
1: 2: 3: 4: 5:
| private void tsm_info_Click(object sender, EventArgs e) { Info infoFenster = new Info(stift,pinsel,musterPinsel); infoFenster.Show(); } |
Und nun wollte ich im Konstruktor des neuen Form diese Angaben verarbeiten und eine Linie im aktuellen Zustand übergeben
Dazu habe ich eine PictureBox als Zeichenfläche gewählt.
Leider zeigt er nichts an, aber auch keinen Fehler
weiß nicht mehr weiter und würde mich über einen lösungsansatz freuen
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| namespace Zeichnen_neu { public partial class Info : Form { Graphics infoZeichenflaeche; public Info(Pen infoStift, SolidBrush infoPinsel, System.Drawing.Drawing2D.HatchBrush infoMusterPinsel) { InitializeComponent();
infoZeichenflaeche = pb_info.CreateGraphics();
infoZeichenflaeche.DrawLine(infoStift, new Point(10,10),new Point 10,50)); } } } |
Christian S. - Sa 23.11.13 00:44
Zusätzlich zu dem, was Ralf sagte: Du brauchst auch noch eine parameterlosen Konstruktor, wenn der Designer im Visual Studio weiterhin funktionieren soll.
Stimmt nicht, wie Ralf richtig anmerkt.
Talemantros - Sa 23.11.13 00:56
Hi,
also das mit dem Paint habe ich versucht, aber leider kennt er dann mein übergebenes Feld nicht mehr
Und die Antwort von Christian verstehe ich leider nicht :-(
Sorry
lg
Edit:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| namespace Zeichnen_neu { public partial class Info : Form { Graphics infoZeichenflaeche; public Info(Pen infoStift, SolidBrush infoPinsel, System.Drawing.Drawing2D.HatchBrush infoMusterPinsel) { InitializeComponent(); } public Info() {
}
private void pb_info_Paint(object sender, PaintEventArgs e) { infoZeichenflaeche = pb_info.CreateGraphics();
infoZeichenflaeche.DrawLine(infoStift, new Point(10, 10), new Point(10, 50)); } } } |
So, als grobe Richtung?
Edit2:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| namespace Zeichnen_neu { public partial class Info : Form { Graphics infoZeichenflaeche;
Pen neuStift; public Info(Pen infoStift, SolidBrush infoPinsel, System.Drawing.Drawing2D.HatchBrush infoMusterPinsel) { InitializeComponent(); neuStift = (Pen)infoStift.Clone(); }
public Info() {
}
private void pb_info_Paint(object sender, PaintEventArgs e) { infoZeichenflaeche = pb_info.CreateGraphics();
infoZeichenflaeche.DrawLine(neuStift, new Point(10, 10), new Point(10, 50)); } } } |
Habe es jetzt noch mit einem Feld versucht in das ich in dem Konstruktor den übergebenen Wert clone.
Leider wieder ohne Erfolg.
Vermutlich wie immer eine Kleinigkeit, die ich nicht verstehe.
Ralf Jansen - Sa 23.11.13 01:14
In e den EventArgs steckt schon ein Graphics Object. Es hilft nicht ein neues zu erzeugen.
Hängt dein Event an einer PaintBox auf der Form (der pb Präfix läßt das vermuten) oder an der Form?
Edit:
Zitat: |
Und die Antwort von Christian verstehe ich leider nicht :-( |
Er meint das dir der Standardkonstruktor fehlte. Also dieser
wie in deinem jetzt gezeigten Code. Damit der Winforms Designer die Form zum designen in Visual Studio auch zum designen anzeigen kann. Das ist aber so nicht richtig. Der Vorfahr der zu designen Form braucht den den die wird vom Designer instanziiert und die InitializeComponent Methode der eigentlichen Form quasi manuell ausgeführt. Wenn die zu designende Form instanziiert werden würde wäre das ein Problem den die ist ja während dem designen vermutlichlich meist nicht kompilierbar und jede Änderung müsste jedesmal zu einem direkten neukompilieren und neuinstanziieren führen. Den Hinweis kannst du also ignorieren außer du willst nochmal von Info ableiten.
Talemantros - Sa 23.11.13 01:41
Bei mir heißt das Steuerelemt nicht Paintbox, sondern PictureBox?!
Vermutlich aber dasselbe, da ich eine Paintbox so erst mal nicht finde.
Leider steige ich noch nicht dahinter.
Talemantros - Sa 23.11.13 11:12
Guten Morgen zusammen,
also ich habe jetzt mal eine Messagebox ausgeben lassen im Konstruktor des InfoFensters mit dem übergebenen Wert infoStift.Width
Das funktioniert. Die Übergabe ist als nicht mein Problem.
Verstehe gerade nur nicht wie ich in der PaintMethode darauf zugreifen kann.
Vielen Dank schonmal für die Hilfe
Viele Grüße
EDIT:
Juhu er zeichnet!!!
Jetzt nur noch mal meine Frage, ob dies eine gute Lösung ist, oder eher schlechten Programmierstil beinhaltet?!
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| namespace Zeichnen_neu { public partial class Info : Form { Pen neuStift; public Info(Pen infoStift, SolidBrush infoPinsel, System.Drawing.Drawing2D.HatchBrush infoMusterPinsel) { InitializeComponent(); neuStift = (Pen)infoStift.Clone(); }
private void pb_info_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawLine(neuStift, new Point(10, 10), new Point(10, 50)); } } } |
Christian S. - Sa 23.11.13 12:07
:gruebel: Stimmt, das mit dem parameterlosen Konstruktor braucht man bei Forms nicht. Muss ich wohl irgendwie mit den UserControls verwechselt haben. War ja schon spät :oops:
Ralf Jansen - Sa 23.11.13 14:40
Zitat: |
Bei mir heißt das Steuerelemt nicht Paintbox, sondern PictureBox?! |
Hab ich durcheinandergeworfen. Sorry.
Du brauchst doch nur eine Oberfläche auf der du zeichnen kannst? Da ist PictureBox, wenn du nichts von den Fähigkeiten der PictureBox brauchst, glaube ich ein wenig übertrieben. Ein Panel würde da reichen.
Und das geclonte Pen Object solltest du dann wenn du es nicht mehr brauchst auch wieder disposen. Z.B. im disposed Event der Form.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!