如何使用从 Form1 中的按钮调用的绘制方法(如绘图矩形)创建一个类(矩形)

本文关键字:创建 何使用 一个 矩形 绘图 按钮 Form1 调用 绘制 方法 | 更新日期: 2023-09-27 18:37:02

我在这里重新解释我的问题。我在这里的所有代码都可以工作。它在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);
            }
        }
      }          
   }

}

如何使用从 Form1 中的按钮调用的绘制方法(如绘图矩形)创建一个类(矩形)

在以后的问题中,请参考您自己的代码...因为我不是 100% 确定我理解你的问题,但在这里。

如果要在单击按钮时创建类Rectangle的新实例,只需将以下代码添加到按钮单击事件:

private void your_Btn_Click_Event(object sender, RoutedEventArgs e)
{
Rectangle rectangle1 = new Rectangle(){};
}

这将在单击按钮时创建类的实例,因此您在类中定义的所有功能都可供您使用。

您可以访问按钮单击事件 WPF 查看器,选择所需的按钮,然后双击"单击"事件的空白区域。这应该会自动为您创建事件处理程序。

编辑:看起来我完全误解了这个问题。

根据您上面放置的链接。 他们的意思是,在form_paint事件中,您应该使用现有的实例,而不是创建新的图形实例。 e 是事件参数的一个实例,由事件触发器上的表单传递

private void button1_Click(object sender, EventArgs e) //<- e is there
    {
    }

所以你会想使用来自该事件Args的类图形的实例

代码的固定实现如下所示

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));
    }
}

(这不会编译,因为通用事件Args e 没有 Graphics 属性,但它应该解释需要发生什么才能工作)。