Hallo Leute,
ich habe vor kurzem angefangen eine Tutorialserie die ich in VB angefangen habe nach C# zu portieren und eigentlich neu zu schreiben
da in der BV-Version einiges schief gelaufen ist. Die Tutorials dienen auch als Lernprogramme für mich.
Ich habe auf @'Erfinder des Rades' gehört und einen damals von mir entwickelten Datentyp (PenData) rausgeworfen und verwende jetzt nur noch Klassen und keine Strukturen etc. mehr!. Ausserdem plane ich das ganze jetzt mehr d.h. nicht nur Oberfläche etc.!.
Meine Frage ist, sehe ich folgendes richtig :
Ob ich die Datenübergabe in die Klassen über einen Konstruktor oder über Eigenschaften regle ist vom Tippaufwand her egal ich muss immer
entweder den Konstruktor oder die Eigenschaften in vollem Umfang angeben um ein geändertes Objekt (Farbe, DashStyle etc.) zu erhalten.
Aber mit den Eigenschaften bin ich näher an der Kapselung da die Background Variablen der Eigenschaften private sind!
Die „CreatePen()“ befindet sich bei Line01 noch im Konstruktor, da es aber auch eine CrateBrush() geben wird habe ich sie aus den
Konstruktor geholt. Über die Eigenschaften kann ich später testen ob ein Pen oder ein Brush gewünscht wird und diesen dann erstellen.
Ich habe ein kleines Testprogramm geschrieben (und angehängt) in dem ich beide Möglichkeiten gegenüberstelle.
Ich würde die Erstellung der Objekte mittels der Eigenschaften vorziehen. Was meint Ihr dazu?
Vielen Dank für Eure Mühe vorab
Hier etwas Code:
Shape01:
Line01:
Shape02:
Line02:
Die Verwendung:
Vielen Dank nochmal und viele Grüße bei der Hitze,
Duster
P.S.: Hab ich was falsch gepostet oder sind alle am Badesee
ich habe vor kurzem angefangen eine Tutorialserie die ich in VB angefangen habe nach C# zu portieren und eigentlich neu zu schreiben
da in der BV-Version einiges schief gelaufen ist. Die Tutorials dienen auch als Lernprogramme für mich.
Ich habe auf @'Erfinder des Rades' gehört und einen damals von mir entwickelten Datentyp (PenData) rausgeworfen und verwende jetzt nur noch Klassen und keine Strukturen etc. mehr!. Ausserdem plane ich das ganze jetzt mehr d.h. nicht nur Oberfläche etc.!.
Meine Frage ist, sehe ich folgendes richtig :
Ob ich die Datenübergabe in die Klassen über einen Konstruktor oder über Eigenschaften regle ist vom Tippaufwand her egal ich muss immer
entweder den Konstruktor oder die Eigenschaften in vollem Umfang angeben um ein geändertes Objekt (Farbe, DashStyle etc.) zu erhalten.
Aber mit den Eigenschaften bin ich näher an der Kapselung da die Background Variablen der Eigenschaften private sind!
Die „CreatePen()“ befindet sich bei Line01 noch im Konstruktor, da es aber auch eine CrateBrush() geben wird habe ich sie aus den
Konstruktor geholt. Über die Eigenschaften kann ich später testen ob ein Pen oder ein Brush gewünscht wird und diesen dann erstellen.
Ich habe ein kleines Testprogramm geschrieben (und angehängt) in dem ich beide Möglichkeiten gegenüberstelle.
Ich würde die Erstellung der Objekte mittels der Eigenschaften vorziehen. Was meint Ihr dazu?
Vielen Dank für Eure Mühe vorab
Hier etwas Code:
Shape01:
C#-Quellcode
- namespace ColorDialog_Problem
- {
- public abstract class Shape01
- {
- public Point Line01StartLocation;
- public Point Line01EndLocation;
- public abstract string Name { get; set; }
- public int Alpha { get; set; }
- public int Width { get; set; }
- public DashStyle DStyle { get; set; }
- public Size Size { get; set; }
- public Pen Pen;
- public abstract void Draw(Graphics e);
- }
- }
Line01:
C#-Quellcode
- namespace ColorDialog_Problem
- {
- class Line01 : Shape01
- {
- public override string Name
- {
- get => "Line01";
- set { }
- }
- public Line01() { }
- public Line01(int alpha, int red, int green, int blue, int width, DashStyle dStyle)
- {
- Pen = new Pen(Color.FromArgb(alpha, red, green, blue), width)
- {
- DashStyle = dStyle
- };
- }
- public override void Draw(Graphics e)
- {
- e.DrawLine(Pen, Line01StartLocation, Line01EndLocation);
- }
- }
- }
Shape02:
C#-Quellcode
- namespace ColorDialog_Problem
- {
- public abstract class Shape02
- {
- public Point Line02StartLocation;
- public Point Line02EndLocation;
- public abstract string Name { get; set; }
- public abstract int Alpha { get; set; }
- public abstract int Red { get; set; }
- public abstract int Green { get; set; }
- public abstract int Blue { get; set; }
- public abstract int Width { get; set; }
- public abstract DashStyle DStyle { get; set; }
- public Pen Pen;
- //public Brush Brush;
- public abstract void Draw(Graphics e);
- }
- }
Line02:
C#-Quellcode
- namespace ColorDialog_Problem
- {
- class Line02: Shape02
- {
- private int _alpha;
- private int _red;
- private int _green;
- private int _blue;
- private int _width;
- private DashStyle _dStyle;
- public override string Name
- {
- get => "Line02";
- set { }
- }
- public override int Alpha
- {
- get => _alpha;
- set => _alpha = value;
- }
- public override int Red
- {
- get => _red;
- set => _red = value;
- }
- public override int Green
- {
- get => _green;
- set => _green = value;
- }
- public override int Blue
- {
- get => _blue;
- set => _blue = value;
- }
- public override int Width
- {
- get => _width;
- set => _width = value;
- }
- public override DashStyle DStyle
- {
- get => _dStyle;
- set => _dStyle = value;
- }
- public Line02() { }
- private Pen CreatePen() // Wird noch eine CreateBrush() geben
- {
- DashStyle dStyle = DashStyle.Dash;
- Pen pen = new Pen(Color.FromArgb(Alpha, Red, Green, Blue), Width);
- pen.DashStyle = DStyle;
- Pen = pen;
- return pen;
- }
- public override void Draw(Graphics e)
- {
- CreatePen();
- e.DrawLine(Pen, Line02StartLocation, Line02EndLocation);
- }
- }
- }
Die Verwendung:
C#-Quellcode
- namespace ColorDialog_Problem
- {
- public partial class Form1 : Form
- {
- private bool _drawState = true;
- private string _shapeName01 = "Line01";
- private string _shapeName02 = "Line02";
- private Line01 _line01 = new();
- private Line02 _line02 = new();
- private int _line01Alpha = 255;
- private int _line01Red = 255;
- private int _line01Green = 201;
- private int _line01Blue = 14;
- private int _line01Width = 10;
- private int _line02Alpha = 255;
- private int _line02Red = 0;
- private int _line02Green = 0;
- private int _line02Blue = 255;
- private int _line02Width = 10;
- private Point _line01StartCoords;
- private Point _line01EndCoords;
- private Point _line02StartCoords;
- private Point _line02EndCoords;
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- InitializeShapes();
- }
- protected override void OnPaint(PaintEventArgs e)
- {
- base.OnPaint(e);
- _drawState = true;
- _line01.Draw(e.Graphics);
- _line02.Draw(e.Graphics);
- }
- private void CmdColorLines_Click(object sender, EventArgs e)
- {
- if (DlgColor.ShowDialog() == DialogResult.OK)
- {
- _line01Red = DlgColor.Color.R;
- _line01Green = DlgColor.Color.G;
- _line01Blue = DlgColor.Color.B;
- _line02Red = DlgColor.Color.R;
- _line02Green = DlgColor.Color.G;
- _line02Blue = DlgColor.Color.B;
- _line01 = new Line01(_line01Alpha, _line01Red, _line01Green, _line01Blue, _line01Width, DashStyle.Dash)
- { Line01StartLocation = _line01StartCoords, Line01EndLocation = _line01EndCoords };
- _line02 = new Line02() { Line02StartLocation = _line02StartCoords, Line02EndLocation = _line02EndCoords };
- _line02.Alpha = Convert.ToInt32(NudAlpha.Value);
- _line02.Red = _line02Red;
- _line02.Green = _line02Green;
- _line02.Blue = _line02Blue;
- _line02.Width = _line02Width;
- _line02.DStyle = DashStyle.Dash;
- }
- Invalidate();
- }
- private void NudAlpha_ValueChanged(object sender, EventArgs e)
- {
- _line01 = new Line01(Convert.ToInt32(NudAlpha.Value), _line01Red, _line01Green, _line01Blue, _line01Width, DashStyle.Dash)
- { Line01StartLocation = _line01StartCoords, Line01EndLocation = _line01EndCoords };
- _line02 = new Line02() { Line02StartLocation = _line02StartCoords, Line02EndLocation = _line02EndCoords };
- _line02.Alpha = Convert.ToInt32(NudAlpha.Value);
- _line02.Red = _line02Red;
- _line02.Green = _line02Green;
- _line02.Blue = _line02Blue;
- _line02.Width = _line02Width;
- _line02.DStyle = DashStyle.Dash;
- Invalidate();
- }
- public void InitializeShapes()
- {
- _line01StartCoords = new Point(250, 150);
- _line01EndCoords = new Point(560, 150);
- _line02StartCoords = new Point(250, 200);
- _line02EndCoords = new Point(560, 200);
- _line01 = new Line01(_line01Alpha, _line01Red, _line01Green, _line01Blue, _line01Width, DashStyle.Dash)
- { Line01StartLocation = _line01StartCoords, Line01EndLocation = _line01EndCoords };
- _line02 = new Line02()
- { Line02StartLocation = _line02StartCoords, Line02EndLocation = _line02EndCoords };
- _line02.Alpha = _line02Alpha;
- _line02.Red = 0;
- _line02.Green = 0;
- _line02.Blue = 255;
- _line02.Width = _line02Width;
- _line02.DStyle = DashStyle.Dash;
- Invalidate();
- }
- }
- }
Vielen Dank nochmal und viele Grüße bei der Hitze,
Duster
P.S.: Hab ich was falsch gepostet oder sind alle am Badesee
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Duster“ ()