c# - 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);
}
}
解决方案
响应 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
标志的使用。
推荐阅读
- javascript - Google Pagespeed“第三方使用”问题
- unix - 给出:`date +\%Y\%m\%d -d昨天`作为参数从一个脚本调用另一个脚本
- python - 将字典列表合并到一个字典中,并将项目附加到列表中
- c# - CS1026:) 预期 | CS1002: ; 预期 | CS1513:} 预期
- reactjs - TypeError:无法读取未定义的属性“url0”
- python-3.x - 迭代时从列表中过滤项目,没有列表理解
- r - 如何在 R 的两列中找到多个值的组合(不是排列)?
- opencv - 非自由算法保持 NO Ubuntu 16.04 opencv-3.4.4
- kubernetes - 在 Kubernetes 中使用 Openstreetmap
- maven - maven eclipse插件生成错误的类路径条目