private void RowColumnNumTextChanged(object sender, EventArgs e) { if (int.TryParse(NumRowsEntry.Text, out row) && int.TryParse(NumColumnsEntry.Text, out col) && row > 0 && col > 0) { this.Grid.Controls.Clear(); buttons.Clear(); start = new ManagedPoint(-1, -1); end = new ManagedPoint(-1, -1); graph = ManagedGridHelper.CreateGrid(col, row); int ID = 0; for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { Button button = new Button(); buttons.Add(button); this.Grid.Controls.Add(button); button.Dock = System.Windows.Forms.DockStyle.Top; button.Location = new System.Drawing.Point(0, 0); button.Name = ID.ToString(); ++ID; button.UseVisualStyleBackColor = true; button.MouseDown += Button_MouseClick; } } horizontalTolerance = buttons[0].Margin.Horizontal * row; verticalTolerance = buttons[0].Margin.Vertical * col; UpdateButtons(); } else { NumRowsEntry.Text = row.ToString(); NumColumnsEntry.Text = col.ToString(); } }
private void Button_MouseClick(object sender, MouseEventArgs e) { switch (e.Button) { case MouseButtons.Left: { Button b = sender as Button; int x, y; GetButtonGraphCoords(b, out x, out y); if (graph[x, y].Type != ManagedNodeType.Start) { if (start != invalidPoint) { graph[start.X, start.Y].Type = ManagedNodeType.Normal; } graph[x, y].Type = ManagedNodeType.Start; start = new ManagedPoint(x, y); } else { graph[x, y].Type = ManagedNodeType.Normal; start = invalidPoint; } } break; case MouseButtons.Right: { Button b = sender as Button; int x, y; GetButtonGraphCoords(b, out x, out y); if (graph[x, y].Type != ManagedNodeType.End) { if (end != invalidPoint) { graph[end.X, end.Y].Type = ManagedNodeType.Normal; } graph[x, y].Type = ManagedNodeType.End; end = new ManagedPoint(x, y); } else { graph[x, y].Type = ManagedNodeType.Normal; end = invalidPoint; } } break; case MouseButtons.Middle: { Button b = sender as Button; int x, y; GetButtonGraphCoords(b, out x, out y); ManagedPoint Point = new ManagedPoint(x, y); if (graph[x, y].Type == ManagedNodeType.Wall) { graph[x, y].Type = ManagedNodeType.Normal; } else { graph[Point].Type = ManagedNodeType.Wall; if (start == Point) { start = invalidPoint; } else if (end == Point) { end = invalidPoint; } } } break; } UpdateTextures(); }