c# - 在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
}
}
我怎样才能使这个平局
解决方案
您可以像这样向绘制事件添加事件处理程序:
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);
}
}
}
有许多缺点:
- 除非您添加一些取消注册事件的方法,否则无法删除圈子。
- 很难管理绘制调用的顺序,因为它取决于添加事件处理程序的顺序。
- 外部部件在表单上绘制有点奇怪。一般来说,如果需要,表单和控件应该管理自己的绘画。
您可能想要通知表单它应该绘制一个椭圆,并让表单来代替绘制。
推荐阅读
- python - 将颜色条作为图例添加到 matplotlib 散点图(多个子图、多个散点图)
- wordpress - 如何在二十六主题的商店页面中添加过滤器
- jquery - 获取 contentEditable div 的第一行
- php - php 线程在 cmd 中正确运行,但不在浏览器中运行。并给出“致命错误:在第 2 行的 C:\xampp\htdocs\test.php 中找不到类 'Thread'”错误
- javascript - 将程序 php 转移到 laravel php
- visual-studio-code - 通过Mac终端打开2个Visual Studio Code窗口
- apache - apache - htaccess if/else 与文件夹?
- r - caret::groupKFold 和验证/测试
- java - Java mkdir() 文件夹,您无法在其中创建子文件夹或文件(拒绝访问)
- jenkins - 使用参数安排 Jenkins 构建