c# graghics画图问题

shmily_19900314 2016-06-08 04:38:41
我单击datagridview中的单元格,前后单击的单元格连一条直线,但是当点击多个单元格时,之前画的线就会消失,这是使用dataGridView1_Paint事件编写的程序。
还有一个问题不是利用重绘事件写的,当点击某个单元格进行拖拽时,单元格之间连线,也是一闪而过,我觉得这两个问题都是属于一个问题,都是重新进入函数时重新画图,然后之前的就没有了。
好像也不简单是这样,下面程序中的sleep1秒的时候,直线是能够显示的,但是超时之后就不显示了,但是并没有发生mousemove事件、、、、
好晕,求大神解答。

private void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Left)//左鼠标曾按下
{
if (Info.BeforeX != e.ColumnIndex * 21 + 10)
{
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.Tomato;
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.SelectionBackColor = Color.Tomato;
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].InheritedStyle.SelectionForeColor = Color.Black;
Pen pen = new Pen(Color.Black, 2);
Info.AfterX = e.ColumnIndex * 21 + 10;
Info.AfterY = e.RowIndex * 20 + 10;
System.Diagnostics.Trace.WriteLine("终点坐标:" + Info.AfterX + " " + Info.AfterY);
this.Show();
g1.DrawLine(pen, Info.BeforeX, Info.BeforeY, Info.AfterX, Info.AfterY);
System.Threading.Thread.Sleep(1000);
//this.BackgroundImage = bmp;//显示图片
g1.Save();
cishu++;
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = cishu;
Info.BeforeX = Info.AfterX;
Info.BeforeY = Info.AfterY;
}
}
else
return;
}


private void dataGridView1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pen = new Pen(Color.Blue, 2);
g.DrawLine(pen, Info.BeforeX, Info.BeforeY, Info.AfterX, Info.AfterY);
g.Save();
}
...全文
176 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shmily_19900314 2016-06-15
  • 打赏
  • 举报
回复
引用 3楼xdashewan 的回复:
[quote=引用 2 楼 shmily_19900314 的回复:] 我用datagridview控件,如果生成的单元格越多,发现单击的时候反应会变慢,除了cellmousemove有什么别的方法吗?我本身是想用事件的,然后自己重新写了一个类,但是datagridview这个控件在这个新建类用不了,该怎么解决这个问题呢?
这要看你datagridview用来做什么,如果只是作为画线的依据,那么其实我可以画一张全是格子的图片一样可以用,但速度要快上很多。但如果你要单元格里展示数据,那么就只能用了[/quote]我想做的是每隔一秒走一格,单元格对应显示是走过的第几个,然后走过的路径最好用线连接起来。除了用线连接还没做出来,其他的都可以用datagridview 做,有没有更好的方法或是控件可以使用呢?
xdashewan 2016-06-13
  • 打赏
  • 举报
回复
引用 2 楼 shmily_19900314 的回复:
我用datagridview控件,如果生成的单元格越多,发现单击的时候反应会变慢,除了cellmousemove有什么别的方法吗?我本身是想用事件的,然后自己重新写了一个类,但是datagridview这个控件在这个新建类用不了,该怎么解决这个问题呢?
这要看你datagridview用来做什么,如果只是作为画线的依据,那么其实我可以画一张全是格子的图片一样可以用,但速度要快上很多。但如果你要单元格里展示数据,那么就只能用了
shmily_19900314 2016-06-12
  • 打赏
  • 举报
回复
@xdashewan 好的我试试。 我用datagridview控件,如果生成的单元格越多,发现单击的时候反应会变慢,除了cellmousemove有什么别的方法吗?我本身是想用事件的,然后自己重新写了一个类,但是datagridview这个控件在这个新建类用不了,该怎么解决这个问题呢?
xdashewan 2016-06-08
  • 打赏
  • 举报
回复
你不能每次只画一根线,你需要在paint里把你要显示的线都画上去,也就是说你的Info得是个集合而不是个体

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧