2011-01-12 10 views
0

C#でWindowsフォームを使用していますが、次の機能を実行したいと考えています。
ユーザーがフォームをクリックすると、その場所に「何か」が描画されますユーザーがクリックしたユーザーのクリックに基づく動的オブジェクト描画

私には2つの質問があります:
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

ありがとうございました。 「クリック」と「マウスクリック」の違いは何ですか? – Eric

+1

@Eric:MouseClickは、どのボタンがクリックされたかなどの情報を含むMouseEventArgsと、適切な座標の場所を表示します。 –

関連する問題