Autor |
Beitrag |
Ritzeratze
Beiträge: 101
|
Verfasst: Do 20.11.14 00:01
Moin,
das Thema wurde zwar schon einmal behandelt, brauche aber nur einen Tipp um selbst an Ziel zu kommen. in den jeweiligen Dialogen lege ich entweder die Rahmenfarbe oder die Spielfeldfarbe fest.
Nach Schliessen des Colordialogfeldes werden die jeweiligen Farben in ein Panel gezeichnet. Hier ist aber mein Problem, da ich jeweils ein Panel.Refresh mache und dabei die Rahmenfarbe bzw die Spielfeldfarbe wieder überschreibe. Der Anwender soll aber Rahmenfarbe und Spielfeldfarbe gleichzeitig im Panel angezeigt bekommen.
Kann mir jemand ein Tipp geben wie ich das realisieren kann ?
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: 81: 82: 83: 84: 85:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace Pong { public partial class EinstellungenDialog : Form { Color RahmenFarbe; Color SpielfeldFarbe; public EinstellungenDialog() { InitializeComponent(); }
public Point LiefereWert() { Point rueckgabe = new Point(0, 0); if (radioButton1.Checked == true) rueckgabe = new Point(320, 200); if (radioButton2.Checked == true) rueckgabe = new Point(640, 480); if (radioButton3.Checked == true) rueckgabe = new Point(1024, 768); if (radioButton4.Checked == true) rueckgabe = new Point(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); return rueckgabe; }
private void btnFarbeRahmen_Click(object sender, EventArgs e) { ColorDialog RahmenColor = new ColorDialog(); if (RahmenColor.ShowDialog() == DialogResult.OK) RahmenFarbe = RahmenColor.Color; panelVorschau.Refresh(); }
private void btnFarbeSpielfeld_Click(object sender, EventArgs e) { ColorDialog SpielfeldColor = new ColorDialog(); if (SpielfeldColor.ShowDialog() == DialogResult.OK) SpielfeldFarbe = SpielfeldColor.Color; panelVorschau.Refresh(); }
public Color LiefereSpielfeldfarbe() { return SpielfeldFarbe; }
public Color LiefereRahmenfarbe() { return RahmenFarbe; }
private void btn_abbrechen_Click(object sender, EventArgs e) { Close(); }
private void panelVorschau_Paint_1(object sender, PaintEventArgs e) { Graphics g = panelVorschau.CreateGraphics(); Pen p = new Pen(RahmenFarbe, 8); SolidBrush sb = new SolidBrush(SpielfeldFarbe); g.DrawRectangle(p, 0, 0, 426,100); g.DrawRectangle(p, 15,30, 1, 50); g.DrawRectangle(p, 100,25,1,1);
g.FillRectangle(sb, 0,0,426,100); } |
Danke und Gruß Ritze
Moderiert von Th69: Code- durch C#-Tags ersetzt
|
|
C#
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Do 20.11.14 00:56
Abend,
tausche mal ganz unten im Code das
C#-Quelltext 1: 2: 3: 4: 5:
| g.DrawRectangle(p, 0, 0, 426,100); g.DrawRectangle(p, 15,30, 1, 50); g.DrawRectangle(p, 100,25,1,1);
g.FillRectangle(sb, 0,0,426,100); |
mit dem hier:
C#-Quelltext 1: 2: 3: 4: 5:
| g.FillRectangle(sb, 0,0,426,100);
g.DrawRectangle(p, 0, 0, 426,100); g.DrawRectangle(p, 15,30, 1, 50); g.DrawRectangle(p, 100,25,1,1); |
Du zeichnest zwar den Rahmen, aber tust ihn sofort darauf wieder überzeichnen mit der FillRectangle Methode. Fülle zuerst den Hintergrung und dann den Rahmen, dann sollte es gehen.
PS: bei boolschen Vergleichen kannst du das == true weglassen.
Aus
C#-Quelltext 1:
| if (radioButton1.Checked == true) |
kannst du einfach
C#-Quelltext 1:
| if (radioButton1.Checked) |
machen.
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
Ritzeratze
Beiträge: 101
|
Verfasst: Do 20.11.14 01:02
Moin C#,
wie einfach war das denn ? Und ich grübel rum, wie ich das anders bauen kann ..
Ganz dickes Danke
RITZE
|
|
|