c# - 画一个矩形

标签 c# .net winforms

我对 Windows 表单编码非常陌生,我正在尝试制作一个具有三个按钮(圆形、矩形和线条)的迷你绘画,当它获得一个按钮作为输入时,它将在面板中绘制形状。 我有这个形状类

class shape
{ 
   public Color color { get; set; }
   public int width { get; set; }
   public int startx { get; set; }
   public  int starty { get; set; }
}

它具有颜色、宽度和开始位置属性。然后我有这个矩形类,例如:

class rectangle : shape
{
    int length { get; set; }
    int width { get; set; }  
}

它从形状类继承共享属性。现在我想在 panel 中打印一个矩形。我熟悉 DrawRectangle 方法,我打印了一个矩形,如下所示:

Pen black = new Pen(Color.Black);
Rectangle rect = new Rectangle(20,20,400,200);
private void panel1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    g.DrawRectangle(black, rect);
}

但我不知道如何从类矩形:形状绘制矩形。我在从单击按钮到矩形分配值时也遇到问题。 你能帮我吗?

最佳答案

我建议您在基类中拥有一个每个形状都会覆盖的绘制函数。

    class shape
    {
        public Color color { get; set; }
        public int thickness { get; set; }
        public int startx { get; set; }
        public int starty { get; set; }

        public virtual void Draw(Graphics g)
        {
        }
    }

    class rectangle : shape
    {
        public int length { get; set; }
        public int width { get; set; }

        public override void Draw(Graphics g)
        {
            using (Pen pen = new Pen(color))
            {
                g.DrawRectangle(pen, new Rectangle(startx, starty, width, length));
            }
        }
    }

然后可以通过调用.Draw(graphics)来绘制任何形状。 定义你的矩形:

        rectangle rectangle = new rectangle();
        rectangle.startx = 20;
        rectangle.starty = 20;
        rectangle.width = 400;
        rectangle.length = 200;

然后在您的 OnPaint 中(或您要执行此操作的任何地方):

Graphics g = panel1.CreateGraphics();
rectangle.Draw(g);

这样做的好处是,您可以拥有一个列表,只需迭代它们,并在拥有多个形状时绘制每个列表:

Graphics g = panel1.CreateGraphics();
foreach (shape s in shapes)          // Assuming shapes is List<shape>
    s.Draw(g);

关于c# - 画一个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40480741/

相关文章:

c# - 在 ALT+TAB 中显示任务,但不在任务栏中显示

C# 程序列出用户和他们各自的目录路径

c# - Asp 联系页面在本地工作但不在服务器上工作

c# - 我在起始索引上有一个子串错误

javascript - AngularJS 添加新项目并从列表中删除现有项目

.net - 托管 .NET 运行时和窗口焦点、问题和不一致

c# - C# 中的性能和内存消耗

c# - 文本框的自定义外观