2015-11-03 60 views
1

我已經創建了應用程序,用戶可以在運行時拖放控件。我使用我的ss函數來使用二維數組對齊表格中的控件。我希望應用程序顯示/突出顯示控件放置在特定座標附近時的位置。在c中突出顯示動態控件的潛在位置#

struct IconPanel 
{ 
    public int left; 
    public int top; 
} 

static void ss(Control control) 
{ 
    int row, col, nearestCol = 0, nearestRow = 0, rowDist = 100, diff, colDist = 100; 

    for (row = 0; row < iconPanels.GetLength(0); row++) 
    { 
     for (col = 0; col < iconPanels.GetLength(1); col++) 
     { 
      diff = Math.Abs(control.Left - iconPanels[row, col].left); 
      if (diff < colDist) 
      { 
       colDist = diff; 
       nearestCol = col; 
      } 
      diff = Math.Abs(control.Top - iconPanels[row, col].top); 
      if (diff < rowDist) 
      { 
       rowDist = diff; 
       nearestRow = row; 
      } 
     } 
    } 
    control.Left = iconPanels[nearestRow, nearestCol].left; 
    control.Top = iconPanels[nearestRow, nearestCol].top; 
} 

回答

1

你可能希望這些位置標記堅持,所以這是的罕見案件一個在那裏我會跌落後或使用

using (Graphics G = theParentContainer.CreateGraphics()) 
     foreach(Rectangle rect in yourPositions) G.DrawRectangle(Pens.Red, rect); 

清潔起來離開控制等。通過呼叫theParentContainer.Invalidate();

這假設你知道可能的位置,並可以創建一個

List<Rectangle> yourPositions = new List<Rectangle>(); 

抱着它們。

正如我們都知道的;-)使用Control.CeateGraphics實例化的Graphics對象創建的圖形將不會持續存在,並會隨着下一個Paint事件消失。但對於這樣的互動幫手圖形,這是完美的。其他的例子是橡皮筋繪圖或光標跟蹤..

+0

我只想要執行ss函數後可能放置控件的空間。我知道使用iconPanels [nearestRow,nearestCol] .left,top放置控件的位置。但是我無法將該位置分配給矩形,因爲rectangle.left不能設置。如果我可以指定創建的矩形的位置,它將是完美的。 – user3201928

+0

「矩形」是一種結構,並且簡單地將左側設置爲(?)用例如'新的矩形(位置,大小);' – TaW

0

在您希望成爲高亮的控件上訂閱Paint事件。

private void highlightControl_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { 

    if(mouse is over or other control is over) { 
     Graphics g = e.Graphics; 
     g.FillRectangle(Brushes.Red, 0, 0, this.Width, this.Height); 
    }  
}