2015-11-03 61 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); 
    }  
}