我在这里重新解释我的问题。我的所有代码都适用。它在button_click上生成椭圆,矩形和线条。我的编程老师要我把btnLijn,btnCirkel和btnRechthoek的代码放在不同的类中。原因是它看起来更整洁。
我还有另一个问题。问题是我当时只能生成1个图形。每次我想添加一个......旧的消失了。如何解决这些问题?
命名空间Kunstgenerator
{
public partial class Form1 : Form
{
bool TekenCirkel = false;
bool TekenRechthoek = false;
bool TekenLijn = false;
public Form1()
{
InitializeComponent();
}
private void button4_Click(object sender, EventArgs e)
{
pictureBox1.Invalidate();
}
private void btnCirkel_Click(object sender, EventArgs e)
{
TekenCirkel = true;
pictureBox1.Refresh();
TekenCirkel = false;
}
private void btnRechthoek_Click(object sender, EventArgs e)
{
TekenRechthoek = true;
pictureBox1.Refresh();
TekenRechthoek = false;
}
private void btnLijn_Click(object sender, EventArgs e)
{
TekenLijn = true;
pictureBox1.Refresh();
TekenLijn = false;
}
private void pictureBox1_Resize(object sender, EventArgs e)
{
Refresh();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
// Er wordt een Random aangemaakt.
Random random = new Random();
// Breedte en hoogte wordt aangemaakt en verwezen naar zichzelf.
// Hier wordt de Random gebruikt om een willekeurige hoogte en breedte te maken.
int canvasHoogte = pictureBox1.ClientRectangle.Height;
int canvasBreedte = pictureBox1.ClientRectangle.Width;
int lengte = random.Next(0, 125);
int X = random.Next(this.Width / 3);
int Y = random.Next(this.Height / 3);
// Primaire kleuren Rood, Geel, Blauw worden hier aangemaakt.
// Door de Random is de kleuren willekeurig. Er wordt een kleur uitgekozen tussen 1 en 255
int r = random.Next(255);
int g = random.Next(255);
int b = random.Next(255);
if (TekenRechthoek)
{
Graphics graphics = e.Graphics;
if (random.Next(2) == 0)
{
graphics.FillRectangle(new SolidBrush(Color.FromArgb(r, g, b)), X, Y, lengte, lengte );
}
else
{
graphics.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(r, g, b))), X, Y, lengte, lengte);
}
}
else if (TekenLijn)
{
Graphics graphics = e.Graphics;
graphics.DrawLine(new Pen(new SolidBrush(Color.FromArgb(r, g, b))), X, Y, lengte, lengte);
}
else if (TekenCirkel)
{
Graphics graphics = e.Graphics;
if (random.Next(2) == 0)
{
graphics.FillEllipse(new SolidBrush(Color.FromArgb(r, g, b)), X, Y, lengte, lengte);
}
else
{
graphics.DrawEllipse(new Pen(new SolidBrush(Color.FromArgb(r, g, b))), X, Y, lengte, lengte);
}
}
}
}
}
答案 0 :(得分:0)
编辑:看起来我完全误解了这个问题。
根据您上面的链接。他们所说的是在form_paint事件中,你应该使用现有的实例,而不是创建一个新的Graphic实例。 e是由事件触发器
上的表单传递的EventsArgs的一个实例private void button1_Click(object sender, EventArgs e) //<- e is there
{
}
所以你想要使用EventArgs
中的类Graphics实例代码的固定实现看起来像这样
public class Form1
{
private void button1_Click(object sender, EventArgs e) //<- e is there
{
Draw(e.Graphics);
}
}
public class Object : Form1
{
public void Draw(Graphics mapGraphics)
{
SolidBrush brush = new SolidBrush(Color.Yellow);
mapGraphics.FillEllipse(brush, new Rectangle(0, 0, 12, 12));
}
}
(这不会编译,因为通用的eventArgs e没有Graphics属性,但它应该解释它需要发生什么才能工作)。
答案 1 :(得分:0)
在以后的问题中,请参考您自己的代码...... 因为我不是100%肯定我理解你的问题,但是这里也是。
如果要在单击按钮时创建班级Rectangle
的新实例,
只需将以下代码添加到按钮单击事件:
private void your_Btn_Click_Event(object sender, RoutedEventArgs e)
{
Rectangle rectangle1 = new Rectangle(){};
}
这将在您单击按钮时创建班级的实例,因此您可以使用您在班级中定义的所有功能。
您可以访问按钮单击事件WPF查看器,选择所需按钮,然后双击“Click”事件的空白区域。这应该会自动为您创建一个事件处理程序。