pictureBox의 onPaint 이벤트 핸들러에 문제가 있습니다. 난 코드를 단순화했습니다, 그래서 지금이 달성하기 위해 노력하고 있습니다 : pictureBox1 경로로 비트 맵을로드하고 pictureBox1 위로 이동할 때 마우스 커서 주위에 작은 사각형을 그립니다.PictureBox onPaint가 모든 컨트롤을 지 웁니다.
private int mouseX;
private int mouseY;
private String path;
public Form1()
{
InitializeComponent();
path = "images\\image.jpg";
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = new Bitmap(path);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
mouseX = e.X;
mouseY = e.Y;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Black, mouseX - 10, mouseY - 10, 20, 20);
pictureBox1.Invalidate();
}
응용 프로그램을 실행할 때 비트 맵이 성공적으로로드되고 마우스를 드래그하면 사각형이 멋지게 그려집니다. 어쨌든 다음과 같은 두 가지 문제가 있습니다.
1) 양식을로드 할 때 창을 어딘가에 옮길 때까지 모든 것이 흰색이지만 pictureBox입니다. menuStrip을 의미합니다. toolStrip은 흰색으로 지워집니다. 내가 pictureBox.Invalidate()를 추가 할 때; Form1_Load 그것은 문제를 처리하는 것 (모든로드 및 표시)하지만 toolStrip 거기에 일부 단추 및 상호 작용, 가시성 및 여전히 문제를 일으키는 변경하는 comboBoxes 있습니다. PictureBox에서만 페인트의 기능을 줄이고 싶습니다.
2) 마우스 커서가 pictureBox를 입력하지 않았는데도 Form이로드되는 순간 사각형이 그려집니다. 또한 커서가 pictureBox를 떠날 때 마지막으로 그려진 사각형이 그대로 남아 있습니다. 나는 그것을 제거하려고 노력했으나 그것을 이해할 수 없었다.
의견을 보내 주셔서 감사합니다. 근본적인 것이 빠져 있지만 나도 몰라요.
'Paint' 이벤트 핸들러에서'pictureBox1.Invalidate();'를 사용하는 것은 다른 페인트 이벤트가 발생하기 때문에 좋지 않습니다. –
'pictureBox1.Invalidate()'를'MouseMove' 핸들러로 옮기는 것을 고려하십시오. –
사각형이 커서를 따라갈 수없는 경우'새로 고침 '으로'무효화 '를 대체하십시오. –