//**************************** Handle the Grid ********************************
private Graphics gridGraphics = null;
private Pen gridPen = new Pen(Color.LightGray);
private int grid = 15; // Set this to what ever...
// Recalculate the coordinates to snap to grid
// Note! Used by the MyUserControl object when positioning
public Point SnapToGrid(Point dropPoint) {
// Continue?
if(checkBoxGrid.Checked == false) return dropPoint;
// Snap to grid
int X_snap = (int)(Math.Round((decimal)(dropPoint.X) / grid) * grid);
int Y_snap = (int)(Math.Round((decimal)(dropPoint.Y) / grid) * grid);
// Check that we stay within the visible area
if(X_snap < 0) X_snap = 0;
if(Y_snap < 0) Y_snap = 0;
return new Point(X_snap, Y_snap);
}
// Draw the grid or not
private void DisplayOrHideGrid() {
// Dispose the current grid
if(gridGraphics != null) gridGraphics.Dispose();
// Draw a new grid?
if(checkBoxGrid.Checked == true) {
gridGraphics = this.CreateGraphics();
// Horizontal lines
for(int X = grid; X < this.Width; X += grid) {
gridGraphics.DrawLine(gridPen, X, 0, X, this.Height);
}
// Vertical lines
for(int Y = grid; Y < this.Height; Y += grid) {
gridGraphics.DrawLine(gridPen, 0, Y, this.Width, Y);
}
}
}
// Show the grid or not
private void checkBoxGrid_CheckedChanged(object sender, EventArgs e) {
DisplayOrHideGrid();
Invalidate(); // Force repaint
}
// On paint this form
private void MyForm_Paint(object sender, PaintEventArgs e) {
DisplayOrHideGrid();
}
Partager