首页 > 解决方案 > Winform如何改变调用重绘事件的调整大小的方式

问题描述

我有一个小表格来绘制网格。但是当我调整它的大小时,我的意思是拖动表格的边缘,我的网格有问题。下面是图片:在此处输入图像描述

如您所见,当我按住鼠标按钮时,表单会不断重新绘制。我想我可以通过改变调整大小事件调用重绘事件的方式来解决这个问题。无论如何,只有在我释放鼠标按钮后才会调用重绘事件?

这是我如何绘制网格的快照代码:

 private void PictureBox_paint(object sender, PaintEventArgs e)
    {

        viewsizeX = pictureBox.Width;
        viewsizeY = pictureBox.Height;
        cellSizeX = 50;
        cellSizeY = 50;
        numOfCellsX = (viewsizeX - (viewsizeX % cellSizeX)) / cellSizeX;
        numOfCellsY = (viewsizeY - (viewsizeY % cellSizeY)) / cellSizeY;


        // draw horizontal lines of gird
        for (int y = 0; y <= numOfCellsY; ++y)
        {
            g.DrawLine(bgp, 0, y * cellSizeY, viewsizeX, y * cellSizeY);
        }
        // draw vertical lines of gri, +6 because here we are drawing 6 more lines on the right of the grid for further moving.
        for (int x = 1; x <= numOfCellsX * 2; ++x)
        {
            int position = (x * cellSizeX) + changeValue;
            if (position >= 0 && position <= viewsizeX)
            {
                g.DrawLine(bgp, position, 0, position, viewsizeY);
            }
        }

我的活动清单: 在此处输入图像描述

标签: c#winforms

解决方案


响应 ResizeBegin 和 ResizeEnd 事件。如:

private disablePaint = false;

private void MyForm_ResizeBegin(object sender, EventArgs e) {
    disablePaint = true;
}

private void MyForm_ResizeEnd(object sender, EventArgs e) {
    disablePaint = false;
}

private void PictureBox_paint(object sender, PaintEventArgs e) {
    if (disablePaint) return;

    // your paint code here
}

调整大小时请勿绘画。注意disablePaint标志的使用。


推荐阅读