如何在不访问System.Windows.forms.painteventargs名称空间的情况下绘制Winform?
-
26-10-2019 - |
题
表格我到目前为止在程序中所做的工作,似乎在Winform上绘制任何内容的唯一方法是通过System.Windows.Forms.painteventargs。如果您无法访问这些参数或此名称空间,而只能访问Winform,那么如何在Winform上绘制(例如矩形)。
提前致谢。
解决方案
如果您想在外面绘制表格(或任何其他控件) Paint
活动,您必须得到 Graphics
该控件的对象。然后,您可以绘制自己内心的内容。但是,请注意,下次出现油漆消息时,您绘制的内容可能会被删除。
绘制表格:
using (Graphics g = this.CreateGraphics())
{
// do all your drawing here
}
其他提示
Painteventargs是一堂课 在里面 system.windows.forms名称空间. 。如果您正在使用表单,则意味着您确实可以访问名称空间和类,但是您可能无法访问您正在尝试绘制的表单代码...
即使您无法访问表单的源代码,油漆事件也是公开的,也可以从表单外部的代码中注册处理程序。 (我猜这是您的问题。)
请参阅这个简单的示例类,该类别引用了一个表单,请用油漆处理程序进行注册,然后进行一些任意图纸。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1 {
class Painter {
public Painter(Form form) {
form.Paint += new PaintEventHandler(form_Paint);
}
void form_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawLine(Pens.Black, 0, 0, 20, 20);
}
}
}
该片段中的重要概念是,如果您对表单(或任何控制衍生的对象)进行引用,则可以在需要重新粉刷控件时自动调查的油漆事件(并且您可以绘制任何所需的内容)在该控件上。)
在片段中,我通过了构造函数中的表格,并在那里的油漆事件注册,但这只是一个快速的示例。您的代码的结构会有所不同,但是...您将有一个表单,并且将有一个初始化步骤,您可以在其中注册该事件,然后创建一种可以完成绘画的方法。
您可以通过创建和处置自己的图形对象来绘制其他方式,但这不是可取的方法。首先,当您需要重新绘制窗口时,您不会收到通知,并且需要创建其他重新绘制的机制,例如计时器(作为一个非常简单且丑陋的示例),您必须自己管理图形对象。
你 得到 通过订阅 Control.Paint
事件,然后在您订阅的事件处理程序中执行所有绘图。这将与相关 PaintEventArgs
.