// Costruttore che inizializza i componenti del form public MainView() { InitializeComponent(); // creazione e inizializzazione di un campo minato interagibile di dimensioni massime _interactableMinefield = new InteractableZone[Minefield.MaxSide, Minefield.MaxSide]; for (int y = 0; y < Minefield.MaxSide; y++) { for (int x = 0; x < Minefield.MaxSide; x++) { // si crea una zona interagibile e se ne impostano alcune proprietà _interactableMinefield[x, y] = new InteractableZone(x, y) { Enabled = false, Visible = false }; _interactableMinefield[x, y].MouseClick += InteractableZoneMouseClicked; // si calcola e si imposta la posizione della zona interagibile int positionX = EdgeSpacing + (_interactableMinefield[x, y].Width * x); int positionY = TopEdgeSpacing + (_interactableMinefield[x, y].Height * y); _interactableMinefield[x, y].Location = new Point(positionX, positionY); // si aggiunge la zona interagibile alla raccolta di controlli del form Controls.Add(_interactableMinefield[x, y]); } } }
// Metodo che segnala quando una zona interagibile nel form è stata cliccata dall'utente private void InteractableZoneMouseClicked(object sender, MouseEventArgs e) { // conversione esplicita del riferimento al mittente in zona interagibile InteractableZone zoneClicked = (InteractableZone)sender; // si segnala che una zona interagibile nel form è stata cliccata dall'utente if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right) { if (InteractableZoneClick != null) { try { InteractableZoneClick(this, new InteractableZoneEventArgs(zoneClicked.X, zoneClicked.Y, zoneClicked.Status, e.Button)); } catch { } } } }