背景是想在picturebox上画一个中心十字架,尝试了很多种方法,发现画出来的线会闪一下,说明线画上去了,但是不知什么原因被刷新掉了。代码里做了一个显示十字架的按钮,按一下显示,再按一下消失
private void DisplayCrossBtn_Click(object sender, EventArgs e)
{
graph = MainPcb.CreateGraphics();
if (MainPcb.Visible == true && CrossDisplay == false)
{
graph.DrawLine(new Pen(Color.Green, 2), 0, (int)(PicPnl.Height / 2), PicPnl.Width, (int)(PicPnl.Height / 2));
graph.DrawLine(new Pen(Color.Green, 2), (int)(PicPnl.Width / 2), 0, (int)(PicPnl.Width / 2), PicPnl.Height);
graph.Save();
CrossDisplay = true;
}
else
{
MainPcb.Refresh();
CrossDisplay = false;
}
}
任何时候点击按钮都能够画出十字架且不消失 ,但是在刷新图片后要重画十字架,调用下面函数
private void DrawCross()
{
if (MainPcb.Visible == true && CrossDisplay == true)
{
graph.DrawLine(new Pen(Color.Green, 2), 0, (int)(PicPnl.Height / 2), PicPnl.Width, (int)(PicPnl.Height / 2));
graph.DrawLine(new Pen(Color.Green, 2), (int)(PicPnl.Width / 2), 0, (int)(PicPnl.Width / 2), PicPnl.Height);
graph.Save();
}
}
这个时候就会出现闪一下消失的问题,然后考虑到按钮响应函数画线没问题,就调用两次按钮响应函数,第一次相当于将按钮点击一次,十字架消失,注意,这个时候其实调用了Refesh()函数,然后第二次调用按钮响应函数的内容跟 DrawCross()函数内容一样,区别就是先走了一次Refresh(),因此,在原来 DrawCross()函数中,先调用一次 Refresh(),再去画线,就不会消失,修改后如下:
private void DrawCross()
{
if (MainPcb.Visible == true && CrossDisplay == true)
{
MainPcb.Refresh();
graph.DrawLine(new Pen(Color.Green, 2), 0, (int)(PicPnl.Height / 2), PicPnl.Width, (int)(PicPnl.Height / 2));
graph.DrawLine(new Pen(Color.Green, 2), (int)(PicPnl.Width / 2), 0, (int)(PicPnl.Width / 2), PicPnl.Height);
graph.Save();
}
}