private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pen1 = new Pen(Color.Red);
g.DrawLine(pen1, 30, 30, 100, 100);//用笔pen1从点(30,30)到(100,100)画直线
Point p1 = new Point(30, 40);
Point p2 = new Point(100, 110);
g.DrawLine(pen1, p1, p2);//用笔pen1从点(30,40)到(100,110)画直线
}两个问题:
1:上面代码为什么没成功画出直线
2:为什么要用Paint事件,MSDN上解释的Paint事件是:在重绘控件时发生....什么叫做重绘控件?这个Paint事件重要吗?哪些地方需要用到
3:谢谢!!!!
{
Graphics g = e.Graphics;
Pen pen1 = new Pen(Color.Red);
g.DrawLine(pen1, 30, 30, 100, 100);//用笔pen1从点(30,30)到(100,100)画直线
Point p1 = new Point(30, 40);
Point p2 = new Point(100, 110);
g.DrawLine(pen1, p1, p2);//用笔pen1从点(30,40)到(100,110)画直线
}两个问题:
1:上面代码为什么没成功画出直线
2:为什么要用Paint事件,MSDN上解释的Paint事件是:在重绘控件时发生....什么叫做重绘控件?这个Paint事件重要吗?哪些地方需要用到
3:谢谢!!!!
解决方案 »
- C# GDI+ 绘图 各位速来讨论 在线等你们的意见哦 !
- 请教高手个逻辑关系问题
- 获取Repeater里textbox的数据
- 关于Socket的问题
- 如何读取所有编码的文本~
- SOS:C# 打包,卸载SQL数据库文件的问题
- 求教错误解决方案Error:“该行已经属于另一个表”
- 怎样获取一个控件在屏幕上的坐标????顶者有分!!!!!!!!
- 500分求解socket服务器端程序问题[高手进]
- 如何在DotNet中获取主板或CPU的唯一标示号?急!!!!!!在线等待!!!!
- C# mediaplayer控件 如何定位从到第几秒然后播放?
- c#是区分大小写的呀,为何 new String() 与 new string() 效果完全相同呢?
2.Paint重绘控件,是指,对控件进行重新绘制,比如本来Panel 没有阴影的效果,你通过在通过paint事件,在panel上面画上阴影。一句话,就是给控件搞造型。
3.不可以,有问题继续讨论。
1:我的真的没有画出直线,改变直线的颜色,还是看不到,你那边画出来了吗?
2:既然,要改变控件的造型,把原来的代码修改,就行了啊,为什么要重绘,无需Paint啊
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pen1 = new Pen(Color.Red);
g.DrawLine(pen1, 30, 30, 100, 100);//用笔pen1从点(30,30)到(100,100)画直线
Point p1 = new Point(30, 40);
Point p2 = new Point(100, 110);
g.DrawLine(pen1, p1, p2);//用笔pen1从点(30,40)到(100,110)画直线 }
上面代码在我这里能画出直线,请确定你这段代码被调用了,有可能你的Paint事件被重置了
2:为什么要用Paint事件,MSDN上解释的Paint事件是:在重绘控件时发生....什么叫做重绘控件?这个Paint事件重要吗?哪些地方需要用到
Paint事件应该是相应WM_PAINT消息的,这个消息在窗口遮挡区域发生变化,窗口大小发生变化时触发,移动窗口不会触发。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{ }
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pen1 = new Pen(Color.Red);
g.DrawLine(pen1, 30, 30, 100, 100);//用笔pen1从点(30,30)到(100,100)画直线
Point p1 = new Point(30, 40);
Point p2 = new Point(100, 110);
g.DrawLine(pen1, p1, p2);//用笔pen1从点(30,40)到(100,110)画直线
}
}
这是全部代码
光标定在这一行上按F9
然后按F5
代码没有问题,我猜你很可能 private void Form1_Paint(object sender, PaintEventArgs e)
{}是你自己敲进去的。
解决办法:
找到文件Form1.Designer.cs中的From1,在其中添加this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);若你找不到Form1.Designer.cs,直接在Form1的构造函数里加this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);也行。
public Form1()
{
InitializeComponent();
this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
}
看看你的窗体是否正确添加了此事件。你不会是直接将别人的代码COPY过来的吧,尝试在FORM构造函数或者Load函数中注册Paint事件
添加这一句
this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
改称
g.DrawLine(pen1, 0, 0, 30, 30); 看看,代码没有问题,看看是不是画到窗口的外面去了
现在进行第二个问题:
2:为什么要用Paint事件,MSDN上解释的Paint事件是:在重绘控件时发生....什么叫做重绘控件?这个Paint事件重要吗?哪些地方需要用到