2014-06-15 26 views
0

我有小圖片爲一個圓,我想作以下:如何在Windows中用戶點擊實例的圖像形成

如果點擊我的窗體上的一些地方,我想補充的是一個新實例如果在那裏沒有其他的圈子,那就圈在那裏。

我正在考慮一個圈子列表,當點擊發生時,我檢查列表以查看它的所有圈子在添加新圈子之前是否重疊,但是我沒有任何形式的經驗,所以我沒有知道什麼是最好的方法。

+0

你解決了你的問題嗎? – TaW

+0

是的,我實例化了一個新的PictureBox並使用了Controls.Add(new_box); 我沒有解釋的權利,我有一個PNG的圓形圖像,我不想畫它。 – nightshade

+0

那麼這並沒有太大的區別;你仍然可以使用我的代碼來進行檢查,只需要稍微改變一下:省略整個Paint事件,並在if子句中添加(new_box)。 – TaW

回答

1

你可以建立一個GraphicsPath並用IsVisible方法檢查點擊點是否在其任何部分內。

這段代碼還建立了一個點列表,並在Paint事件中爲每個點繪製圖像。如果您讓GraphicsPath執行繪圖,請取消對DrawPath行的註釋並刪除這些與列表相關的行。

GraphicsPath GP = new GraphicsPath(); 
List<Point> PL = new List<Point>(); //** 

private void Form1_MouseClick(object sender, MouseEventArgs e) 
{ 
    int diameter = 22; // put in the size of your circle 
    Size s = new Size(diameter, diameter); 

    if (!GP.IsVisible(e.Location)) 
    { 
     Point middle = new Point(e.X - diameter/2, e.Y - diameter/2); 
     GP.AddEllipse(new Rectangle(middle, s)); 
     PL.Add(middle); //** 
    } 

    this.Invalidate(); 
} 

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    // e.Graphics.DrawPath(Pens.Firebrick, GP); 
    Image img = new Bitmap("D:\\circle22.png"); //** 
    foreach(Point pt in PL) e.Graphics.DrawImage(img, pt); //** 
    img.Dispose(); //** 
} 
相關問題