2013-02-20 3 views
2

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를 떠날 때 마지막으로 그려진 사각형이 그대로 남아 있습니다. 나는 그것을 제거하려고 노력했으나 그것을 이해할 수 없었다.

의견을 보내 주셔서 감사합니다. 근본적인 것이 빠져 있지만 나도 몰라요.

+3

'Paint' 이벤트 핸들러에서'pictureBox1.Invalidate();'를 사용하는 것은 다른 페인트 이벤트가 발생하기 때문에 좋지 않습니다. –

+3

'pictureBox1.Invalidate()'를'MouseMove' 핸들러로 옮기는 것을 고려하십시오. –

+0

사각형이 커서를 따라갈 수없는 경우'새로 고침 '으로'무효화 '를 대체하십시오. –

답변

0

2) MouseMove은 커서가 그림 상자 위에있을 때만 작동합니다. 그리기 직사각형을 시작할 시점과 중단 할 시점을 처리하려면 MouseEnterMouseLeave을 사용해보십시오.