2012-10-03 36 views
2

想知道如何去實際選擇我繪製的矩形,然後能夠移動它?我也需要刪除它,但我可以將這部分工作。只是有點失去了我需要做的事情。僞代碼或實際的代碼是好的,只是一個墊腳石將不勝感激。另外,如果其他人知道如何在列表框中實際顯示矩形X和Y,那麼這將很棒。但目前,最重要的問題是優先考慮。如何選擇和移動pictureBox中的矩形?

這是我畫我的矩形:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 

     if (buttonDown) 
     { 
      if (pictureBox1.Image != null) 
      { 
       draw = true; 
       Graphics g = Graphics.FromImage(imageFile); 
       Pen pen1 = new Pen(color, 4); 
       g.DrawRectangle(pen1, e.X - 5, e.Y - 5, 5, 5); 
       g.Save(); 
       pictureBox1.Image = imageFile; 
      }     
     }   
    } 
+0

畫框中是否只有一個矩形或者還有其他畫作? – JleruOHeP

+0

這是什麼問題?你想達到什麼目的? –

回答

2

爲了實現這樣的行爲,你將不得不存儲有關矩形的信息。例如。在這樣的類:

class Rect 
{ 
    int X { get; set; } 
    int Y { get; set; } 
    int Width { get; set; } 
    int Height { get; set; } 
} 

注意,已經有一個Rectangle類型。你也可以使用它,但由於它是一個結構,你必須以不同的方式處理選擇。現在

您可以創建矩形列表和選擇:

List<Rect> rects = new List<Rect>(); 
Rect selectedRect = null; 

在列表框中顯示這些rects是很容易的。只需將列表框的項目綁定到列表即可。您可能需要覆蓋ToString()以獲得用戶友好的輸出。

繪製矩形可能看起來像以下:

foreach(var r in rects) 
{ 
    g.DrawRectangle(pen1, r.X, r.Y, r.Width, r.Height); 
    ... 
} 

可以突出顯示選定的矩形。例如。用不同的筆或周圍其他矩形:

if(selectedRect == r) 
    g.DrawRectangle(pen1, r.x - 5, r.Y - 5, r.Width + 10, r.Height + 10); 

MouseDown情況下,也可以設置選擇爲點擊矩形其他適當的事件:

foreach(var r in rects) 
    if(e.X >= r.X && e.X <= r.X + r.Width && e.Y >= r.Y && e.Y <= r.Y + r.Height) 
     selectedRect = r; 

要移動矩形,你會救被點擊的矩形的點(距左上角的距離)。在鼠標移動事件中,檢查左側按鈕是否關閉,並相應地重新定位selectedRect

+0

謝謝,讓它更容易理解! – Fan12121