나는 이미지의 일부를 선택하기 위해 도구를 만들고 있습니다. 나는 그것을 만들기 위해 PictrureBox, 간단한 방법이있다 : 나는 마우스를 오른쪽으로 이동하고 아래로하면Windows에서 이미지의 일부분을 선택하십시오.
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이 변경 되었기 때문에 마우스를 왼쪽 또는 위로 움직이면 패널이 다시 그려지고, 마우스를 오른쪽/아래로 움직이면 위치가 변경되지 않고 크기 만 변경되므로 이해합니다. 다시 그려지지 않으면 일부 픽셀 만 패널에 추가됩니다. 이것에 대한 표준 솔루션은 무엇입니까?
public class BufferedPanel : Panel {
public BufferedPanel() {
this.DoubleBuffered = true;
this.ResizeRedraw = true;
}
}
표준 해결책은 Paint 이벤트에서 Panel 컨트롤을 사용하는 대신 e.Graphics.FillRectangle()을 사용하는 것입니다. –