关于c#在picturebox画线闪一下消失的问题

背景是想在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();
    }
}

你可能感兴趣的:(关于c#在picturebox画线闪一下消失的问题)