Autor Beitrag
casban
Hält's aus hier
Beiträge: 10

Window 8.1 Professional
C# (VS 2013 Ultimate Edition)
BeitragVerfasst: Do 13.09.12 21:43 
Hallo Zusammen,

ich habe mal wieder eine Frage :gruebel:

Ich wähle über eine colorDialog eine Farbe (Rahmenfarbe) aus. Diese soll in Form2 in einem Panel angezeigt werden, so weit so gut. Diese Farbe soll dann
in Form1 auch in einem Panel als Farbe für den Rahmen verwendet werden. Bis hier hin ist alles soweit i.O. Wenn ich jetzt aber die Form2 wieder aufrufe , dann soll die Rahmenfarbe aus Panel(Form1) in dem Panel(Form2) auch wieder angezeigt werden.Gibt es hier eine Möglichkeit das Panel zu überschreiben. Mit der Hintergrundfarbe ist soweit alles Ok, das klappt.

Grüße CB

ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
 private void spielfeldgrößeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Neue Instanzen erzeugenfür Spielfarbe,Ballfarbe und Größe
            Point neueGroesse = new Point(00);
            Color Spielfarbe = new Color();
            Color Ballfarbe = new Color();
            EinstellungenDialog neueWerte = new EinstellungenDialog(this.Width, this.Height,this.Spielfeldfarbe,this.Linienfarbe);
            //wenn der Dialog über die Ok-Schaltfläche beendet wird
            if (neueWerte.ShowDialog() == DialogResult.OK)
            {
                //die Spielfeldfarbe holen
                Spielfarbe = neueWerte.LiefereSpielfarbe();
                Spielfeldfarbe = Spielfarbe;
                //die Ball und linienfarbe holen
                Ballfarbe = neueWerte.LiefereBallFarbe();
                Linienfarbe = Ballfarbe;
                //die Größe holen
                neueGroesse = neueWerte.LiefereWert();
                //den Dialog wieder schließen
                neueWerte.Close();
                //Das Formular ändern
                this.Width = neueGroesse.X;
                this.Height = neueGroesse.Y;
                //neu ausrichten
                this.Left = (Screen.PrimaryScreen.Bounds.Width - this.Width) / 2;
                this.Top = (Screen.PrimaryScreen.Bounds.Height - this.Height) / 2;
                //die Zeichenfläche neu beschaffen
                zeichenflaeche = spielfeld.CreateGraphics();
                //das Spielfeld neu setzen
                setzeSpielfeld();
                zeichneSpielfeld();
                neuerBall();
                spielfeld.Refresh();
            }
        }


und Form2

ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
   public partial class EinstellungenDialog : Form
    {
        Pen Stift;
        Graphics zeichenflaeche;
        Color HintergrundVorschau;
        Color RahmenVorschau;


        public EinstellungenDialog(int Breite, int Hoehe,Color Spielfeld,Color Rahmen)
        {
            InitializeComponent();
            zeichenflaeche = panel1.CreateGraphics();            
            Stift = new Pen(RahmenVorschau,6);
            this.HintergrundVorschau = Spielfeld;
            this.RahmenVorschau = Rahmen;
        }

        //Methode zum liefern der Spielfarbe
        public Color LiefereSpielfarbe()
        {
            return colorDialogSpielfeld.Color;
        }
        //Methode zum liefern der Ball und Linienfarbe
        public Color LiefereBallFarbe()
        {
            return colorDialogRahmen.Color;
        }

        //Methode zum auswählen der Rahmenfarbe
        private void buttonRahmen_Click(object sender, EventArgs e)
        {
            colorDialogRahmen.Color = RahmenVorschau;
            colorDialogRahmen.ShowDialog();
            if (colorDialogRahmen.ShowDialog() == DialogResult.OK)
                Stift.Color = colorDialogRahmen.Color;
            panel1.Refresh();
        }

        //Methode zum auswählen der Spielfeldfarbe
        private void buttonSpielfeldfarbe_Click(object sender, EventArgs e)
        {
            colorDialogSpielfeld.Color = HintergrundVorschau;
            colorDialogSpielfeld.ShowDialog();
            if (colorDialogSpielfeld.ShowDialog() == DialogResult.OK)
                panel1.BackColor = colorDialogSpielfeld.Color;
            
            panel1.Refresh();
        }

        //Methode zum Zeichnen des Rahmens in der Vorschau
        void ZeichneRahmen() 
        {            
            Stift.Color = colorDialogRahmen.Color;
            zeichenflaeche.DrawRectangle(Stift, 0032472);
            zeichenflaeche.DrawRectangle(Stift, 1020125);
            zeichenflaeche.DrawRectangle(Stift, 1802511);            
        }
      

        //die Paint-Methode des Panels
        private void panel1_Paint(object sender, PaintEventArgs e)
        {      
            ZeichneRahmen();
            
        }

        private void EinstellungenDialog_Load(object sender, EventArgs e)
        {
            Pen StiftVorschau;
            StiftVorschau = new Pen(RahmenVorschau,6);            
            zeichenflaeche.DrawRectangle(StiftVorschau, 0032472);
            zeichenflaeche.DrawRectangle(StiftVorschau, 1020125);
            zeichenflaeche.DrawRectangle(StiftVorschau, 1802511);
            panel1.BackColor = HintergrundVorschau;
            
            
        }

    }
}
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Do 13.09.12 22:27 
Also was mir jetzt so auffält: Du machst da was grundlegend falsch.
Du solltest nicht ".CreateGraphics()" verwenden. Nie.

Stattdessen hast du ja schon das panel1_Paint Ereignis implementiert, dort bekommst du ja in den PaintEventArgs das graphics-Objekt.
Könnte dann so aussehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        //die Paint-Methode des Panels
        private void panel1_Paint(object sender, PaintEventArgs e)
        {      
            Stift.Color = colorDialogRahmen.Color;
            e.Graphics.DrawRectangle(Stift, 0032472);
            e.Graphics.DrawRectangle(Stift, 1020125);
            e.Graphics.DrawRectangle(Stift, 1802511);
            
        }
Die Variable zeichenfläche dann direkt löschen.
Näheres kannst du hier nachlesen - auch mit schönem Beispielcode zum malen auf Panels:
www.bobpowell.net/picturebox.htm