Kan allemaal:
Stap 1:
[CPP]private void panel1_Paint(object sender, PaintEventArgs e)
{
PaintBorder();
}
private void PaintBorder()
{
if (panel1.BorderStyle == BorderStyle.FixedSingle)
{
int thickness = 3;//it's up to you
int halfThickness = thickness / 2;
using (Pen p = new Pen(Color.Black, thickness))
{
e.Graphics.DrawRectangle(p, new Rectangle(halfThickness,
halfThickness,
panel1.ClientSize.Width - thickness,
panel1.ClientSize.Height - thickness));
}
}
}[/CPP]
Methode maken, gehele code in de methode kopieren en kijken wat de foutmeldingen zijn. Nu zul je in de IDE zien dan de methode de 'e' variable niet kent, dus dan moet je deze aan de methode toevoegen. Zie Stap 2
Stap 2:
[CPP]private void panel1_Paint(object sender, PaintEventArgs e)
{
PaintBorder(e.Graphics);
}
private void PaintBorder(Graphics graphics)
{
if (panel1.BorderStyle == BorderStyle.FixedSingle)
{
int thickness = 3;//it's up to you
int halfThickness = thickness / 2;
using (Pen p = new Pen(Color.Black, thickness))
{
graphics.DrawRectangle(p, new Rectangle(halfThickness,
halfThickness,
panel1.ClientSize.Width - thickness,
panel1.ClientSize.Height - thickness));
}
}
}
[/CPP]
Nu zal het al werken, maar reference je nog wel 'panel1' in de method. Die kun je eruit halen en algemeen maken door in de method signature een panel toe te voegen zoals de graphics nu zijn toe gevoegd.
Stap 3:
[CPP]private void panel1_Paint(object sender, PaintEventArgs e)
{
PaintBorder(sender as Panel, e.Graphics);
}
private void PaintBorder(Panel panel, Graphics graphics)
{
if (panel.BorderStyle == BorderStyle.FixedSingle)
{
int thickness = 3;//it's up to you
int halfThickness = thickness / 2;
using (Pen p = new Pen(Color.Black, thickness))
{
graphics.DrawRectangle(p, new Rectangle(halfThickness,
halfThickness,
panel.ClientSize.Width - thickness,
panel.ClientSize.Height - thickness));
}
}
}
[/CPP]
Nu is alles los van het panel en kun je als je wilt optionele dingen eruit halen en als variable toevoegen aan de signature van de method. Zoals de dikte en kleur van de rand. Zie stap 4.
Stap 4:
[CPP]private void panel1_Paint(object sender, PaintEventArgs e)
{
PaintBorder(sender as Panel, e.Graphics, 3, Color.Black);
}
private void PaintBorder(Panel panel, Graphics graphics, int borderThickness, Color borderColor)
{
if (panel.BorderStyle == BorderStyle.FixedSingle)
{
int halfThickness = borderThickness / 2;
using (Pen pen = new Pen(borderColor, borderThickness))
{
graphics.DrawRectangle(
pen,
new Rectangle(
halfThickness,
halfThickness,
panel.ClientSize.Width - borderThickness,
panel.ClientSize.Height - borderThickness)
);
}
}
}
[/CPP]
Nu kun je alles instellen als je de method aanroept. Wat laatste wijzigingen om het compleet te maken en voila:
Stap 5:
[CPP]private void panel1_Paint(object sender, PaintEventArgs e)
{
var panel = (Panel)sender;
if (panel.BorderStyle == BorderStyle.FixedSingle)
{
PaintBorder(panel, e.Graphics, 3, Color.Black);
}
}
private void PaintBorder(Panel panel, Graphics graphics, int borderThickness, Color borderColor)
{
int halfThickness = borderThickness / 2;
using (Pen pen = new Pen(borderColor, borderThickness))
{
var rectangle = new Rectangle(
halfThickness,
halfThickness,
panel.ClientSize.Width - borderThickness,
panel.ClientSize.Height - borderThickness);
graphics.DrawRectangle(pen, rectangle);
}
}
[/CPP]
If statement eruit, die hoort daar niet thuis in dit geval. Losse 'rectangle' variable 'persoonlijk' leest het fijner. 'p' variable naar 'pen'
Hoop dat het maken van methodes nu een beetje duidelijker is.
Dan kun je dus zoiets als meerdere randen tekenen makkelijker doen
[CPP]private void panel1_Paint(object sender, PaintEventArgs e)
{
var panel = (Panel)sender;
if (panel.BorderStyle == BorderStyle.FixedSingle)
{
PaintBorder(panel, e.Graphics, 10, Color.Red);
PaintBorder(panel, e.Graphics, 8, Color.Yellow);
PaintBorder(panel, e.Graphics, 4, Color.Green);
PaintBorder(panel, e.Graphics, 2, Color.Blue);
PaintBorder(panel, e.Graphics, 1, Color.Black);
}
}[/CPP]