2014-01-07 42 views
2

如果我在面板中繪製一些矩形,我如何選擇其中一個並將其刪除。我的代碼在這裏,我把它寫panel_OnClick事件中:我如何選擇繪製矩形並在面板中清除它?

g = panel1.CreateGraphics(); 
Pen p = new Pen(Color.Black); 
p.Width = 2; 
g.DrawRectangle(p, e.X, e.Y, 100, 60); 
p.Dispose(); 
g.Dispose(); 
+0

你知道你要刪除的矩形的大小和位置? – 2014-01-07 20:14:29

+0

我可以通過這一行在面板的任何位置繪製矩形:g.DrawRectangle(p,e.X,e.Y,100,60); – user3170648

+0

我知道,但你必須知道你想要刪除的矩形的位置。 – 2014-01-07 20:18:22

回答

0

Rectangle將有Region
您需要訂閱以下之一:MouseClickMouseDownMouseUp

// assuming you keep a reference of the rectangle 

void OnMouseClick(object sender, MouseEventArgs e) { 
    if(myRect.Region.IsVisible(e.Location) { 
     // perform action on myRect ... 
     // have window Invalidate(myRect) 
     // Refresh() the invalidated area. 
    } 

} 

這段代碼假定沒有矩形重疊。你也可以從Rectangle的點創建一個GraphicsPath,然後從那個路徑創建一個GraphicsPath,我相信你可以創建一個Region來使得矩形的實際行能夠被選中。

更新根據註釋

Region
GraphicsPath

我檢查,我沒有看到Region屬性Rectangle。因此,創建區域執行以下操作:

var gPath = new GraphicsPath(); 
gPath.AddRectangle(rectangle); 

var region = new Region(gPath); 
+0

什麼是myRect?我沒有在我的代碼中創建矩形對象 – user3170648

+0

第一條評論提醒您假設您正在緩存對矩形的引用。你還有什麼能夠知道選擇了哪個矩形? :) – IAbstract

+0

請問我是什麼地區?因爲我從矩形創建對象來保存矩形的位置和大小:rectangle ob = new Rectangle(e.X,e.Y,100,60); – user3170648

0

拉絲面板上就像是借鑑了一張紙 - 他們是銘刻在和不再是一個矩形,但像素的集合。即使您可以使用背景顏色在要清除的矩形上繪製矩形,但您不會「移除矩形」,只需在現有矩形上繪製矩形即可。