2017-08-06 32 views
0

私はpictureBoxのクリックイベントを持っています。私は、クリックの座標を取得し、tは円を描く試してください。クリックの座標で矩形を描く方法は?

private void pictureMain_Click(object sender, EventArgs e){ 

    MouseEventArgs me = (MouseEventArgs)e; 

    Point coordinates = me.Location; 
    int x = coordinates.X; 
    int y = coordinates.Y; 

    // Create pen. 
    Pen blackPen = new Pen(Color.Red, 2); 

    // Create rectangle for ellipse. 
    Rectangle rect = new Rectangle(x, y, 50, 50); 

    g.DrawEllipse(blackPen, rect); 

    } 

しかし、それは、ピクチャボックスの座標(x、y)で円を描くありません。円を別の場所に置きます。

+1

'DrawEllipse'が実際に外接する四角形の内側に座って、驚くことではないが、楕円を描画します。クリック位置を中心とする矩形を描画したい場合は、 'gDrawRectangle(blackPen、xw/2、y - w/2、w、w);' int w = 50; 'を使います。 >> gはどこから来たのですか?キャッシュされたGraphicsオブジェクト?悪い、悪い、悪い。 >>場所コードMouseClickイベントに直接アクセスするには! ; >>ペンの廃棄を作成すると、gdiのリソースが漏れてしまいます! ' – TaW

+0

これをコードの回答として設計できますか? – Daniel

+0

いいえ、これは本当にあなたが本当に望むものを知るのに十分なほど明確ではありません(四角形は維持されますか?次にPaintイベントでのみ描画されます)。 – TaW

答えて

2

これを試してみてください:

private void pictureBox1_Click (object sender, EventArgs e) 
{ 
    Point ellipseCenter = ((MouseEventArgs) e).Location; 
    Size ellipseSize = new Size (50, 50); 

    Point rectPosition = new Point (ellipseCenter.X - ellipseSize.Width/2, ellipseCenter.Y - ellipseSize.Height/2); 
    Rectangle rect = new Rectangle (rectPosition, ellipseSize); 

    using (Graphics grp = Graphics.FromImage (pictureBox1.Image)) 
    { 
     grp.DrawEllipse (Pens.Red, rect); 
    } 

    pictureBox1.Refresh(); 
} 
関連する問題