using System.Drawing;
using System.Windows.Forms;
namespace button_dinamici
{
public partial class Form1 : Form
{
Button[] button = new Button[10]; // può contenere 10 bottoni indice da 0 a 9
int Xp; // coordinata X al click del mouse all'interno del bottone
int Yp; // coordinata Y al click del mouse all'interno del bottone
int numBUTT = 0;
public Form1()
{
InitializeComponent();
creaBUTT(); // crea il bottone zero
}
private void button_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) // click mouse sinistro
{
Xp = e.X; // coordinata X mouse nel bottone al momento del click tasto sinistro, servirà per mantenere la posizione del cursore nel bottone
Yp = e.Y; // coordinata Y mouse nel bottone al momento del click tasto sinistro, servirà per mantenere la posizione del cursore nel bottone
Button b = (Button)sender; // in sender c'è l'oggetto cliccato, converto in Button e lo immetto in b
int ind = (int)b.Tag; // conversione di tipo da oggetto a int
Point LocBUTT = b.Location; // coordinate del bottone al momento del click tasto sinistro
b.BringToFront(); // il bottone cliccato passa sopra gli altri
//nella barra del titolo tutte le info recuperate, in b e in b.Tag
this.Text = "ID:" + ind + " Posizione iniziale = Left:" + LocBUTT.X + " Top:" + LocBUTT.Y + " Nome = " + b.Name;
}
if (e.Button == MouseButtons.Right) // click mouse destro, crea nuovo bottone
{
if (numBUTT < button.Length - 1)
{
numBUTT++; // incremento di 1 per nuovo bottone
creaBUTT();
}
else
{
this.Text = "Hai creato " + button.Length.ToString() + " bottoni";
}
}
}
private void button_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) // solo se mentre si muove il mouse, il tasto sinistro è premuto
{
Button b = (Button)sender; // in sender c'è l'oggetto cliccato, converto in Button e lo immetto in b
int ind = (int)b.Tag; // conversione di tipo da oggetto a int
b.Top = b.Top + e.Y - Yp; // trascinamento Y sul form
b.Left = b.Left + e.X - Xp; // trascinamento X sul form
//nella barra del titolo tutte le info recuperate, in b e in b.Tag
this.Text = "ID:" + ind + " Posizione in movimento = Left:" + b.Left + " Top:" + b.Top + " Nome = " + b.Name;
}
}
private void button_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Button b = (Button)sender; // // in sender c'è l'oggetto cliccato, converto in Button e lo immetto in b
int ind = (int)b.Tag; // conversione di tipo da oggetto a int
this.Text = "ID:" + ind + " Posizione finale = Left:" + b.Left + " Top:" + b.Top + " Nome = " + b.Name;
}
}
private void creaBUTT()
{
button[numBUTT] = new Button(); // alloca per un nuovo bottone
button[numBUTT].Location = new Point(30, 40 * numBUTT + 40); // coordinate
button[numBUTT].Name = "button" + numBUTT.ToString("00"); // composizione nome
button[numBUTT].Tag = numBUTT; // contiene l'indice, utile
button[numBUTT].Size = new Size(150, 23);
button[numBUTT].TabIndex = numBUTT; // avanzamento selezione al TAB
button[numBUTT].Text = numBUTT.ToString("00") + " DragMe_CopyMe"; // composizione testo
button[numBUTT].MouseDown += new MouseEventHandler(button_MouseDown); // attiva evento
button[numBUTT].MouseMove += new MouseEventHandler(button_MouseMove); // attiva evento
button[numBUTT].MouseUp += new MouseEventHandler(button_MouseUp); // attiva evento
this.Controls.Add(button[numBUTT]); // aggiunge e mostra sul form
}
}
}