2011-01-12 2 views
0

C#에서 Windows Forms를 사용하고 있으며 다음을 수행하는 함수를 만들고 싶습니다.
사용자가 폼을 클릭하면 해당 위치에 "무언가"가 그려집니다 사용자가 클릭 한사용자 클릭에 기반한 동적 객체 드로잉

나는 두 가지 질문이 있습니다.
1) 최선의 방법/권장 방법이 있습니까? 지금 마우스를 클릭하고 커서의 위치를 ​​얻은 다음 해당 위치에있는 객체를 그리면 실행되는 Windows EventHandler를 사용하고 있습니다.

2) "Cursor.Position"의 위치에 객체를 그릴 때 실제 커서가 위치한 곳보다 실제로 멀리 그려집니다. (그것을 아래로 그리고 왼쪽으로 그립니다.) 화면 좌표를 가져 오기 위해 Cursor.Position에서 수행해야하는 변환이 있습니까?

아래에서는 간단한 샘플 코드를 보여 줬습니다. "Click"EventHandler를 사용하여 양식을 등록하는 것을 볼 수 있습니다. 그런 다음 EventHandler가 실행되면 간단히 폼에 레이블을 그리는 함수를 호출합니다.

미리 도움을 주셔서 감사합니다.

MyForm myForm = new myForm(); 
myForm.Click += new System.EventHandler(this.MyForm_Click); 

_

private void MyForm_Click(object sender, EventArgs e) 
{ 
    Point p = Cursor.Position; // Does this get the correct position? 
    DrawObject(p); 
} 

private void DrawObject(Point p) 
{ 
    Label l = new Label() 
    l.Size = new System.Drawing.Size(300, 300); 
    l.Text = "New Label"; 
    l.Location = p; 
    this.Controls.Add(l); 
} 

답변

2

대신 Cursor.Position를 사용, 당신은 MouseClick event에 가입해야합니다. 이것은 핸들러 자체에 위치 정보를 제공합니다.

Cursor.Position은 좌표를 화면 좌표로 나타냅니다. 이를 사용하려면 PointToClient을 사용하여 양식의 좌표 공간에이를 매핑해야합니다.

+0

감사합니다. "Click"과 "MouseClick"의 차이점은 무엇입니까? – Eric

+1

@Eric : MouseClick은 어떤 버튼이 클릭되었는지 등의 정보를 포함하는 MouseEventArgs와 위치 (적절한 좌표로) –

관련 문제