我正在制作工具来选择图像的一部分。我有 PictrureBox,制作方法很简单:
void StartPanel(object sender, MouseEventArgs args)
{
xStart = args.X;
yStart = args.Y;
panelStarted = true;
pan.Location = new Point(xStart, yStart);
}
void FinishPanel(object sender, MouseEventArgs args)
{
xFinish = args.X;
yFinish = args.Y;
panelStarted = false;
}
void UpdatePanel(object sender, MouseEventArgs args)
{
if (panelStarted)
{
int x = args.X;
int y = args.Y;
int newxstart = xStart;
int newystart = yStart;
int neww = 0;
int newh = 0;
if (x >= xStart)
neww = x - xStart;
else
{
neww = xStart - x;
newxstart = x;
}
if (y >= yStart)
newh = y - yStart;
else
{
newh = yStart - y;
newystart = y;
}
pan.Size = new Size(neww, newh);
pan.Location = new Point(newxstart, newystart);
}
}
当我左右移动鼠标时,绝对没问题。但是当我将它向左或向上移动时,我可以看到我所在区域的闪烁。所以我明白了,这是因为当我向左或向上移动鼠标时,我的面板被重绘,因为 Panel.Location 改变了,当我向右和向下移动鼠标时,位置没有改变,只有大小改变,所以它不会重绘,只是将一些像素添加到面板中。什么是标准解决方案?