首页 > 解决方案 > 在c#中绘制图形以形成

问题描述

我想从绘制形状的外部脚本中调用一个函数。

表单当前打开为空白,上面没有形状,也没有错误。

下面是从不同文件调用函数的空表单

public partial class Form1 : Form
{
    other_fff functions1 = new other_fff();
    public Form1()
    {
        InitializeComponent();
        functions1.draw_circle(this);
    }
}

下面是我得到我的绘图功能的地方

class other_fff
{
    public void draw_circle(Form1 the_form)
    {
        Pen Pen1 = new Pen(Color.Blue, 9);
        Graphics g = the_form.CreateGraphics();
        g.DrawEllipse(Pen1, 50, 50, 10, 5); // does not work 
    }
}

我怎样才能使这个平局

标签: c#formsgraphics

解决方案


您可以像这样向绘制事件添加事件处理程序:

        public static void DrawCircle(Form form)
        {
            form.Paint += OnPaint;
            void OnPaint(object sender, PaintEventArgs e)
            {
                using (var Pen1 = new Pen(Color.Blue, 9))
                {
                    e.Graphics.DrawEllipse(Pen1, 50, 50, 10, 5);
                }
            }
        }

有许多缺点:

  • 除非您添加一些取消注册事件的方法,否则无法删除圈子。
  • 很难管理绘制调用的顺序,因为它取决于添加事件处理程序的顺序。
  • 外部部件在表单上绘制有点奇怪。一般来说,如果需要,表单和控件应该管理自己的绘画。

您可能想要通知表单它应该绘制一个椭圆,并让表单来代替绘制。


推荐阅读