Cześć,
Jestem początkujący w C# i jest to mój pierwszy post na forum. Aktualnie uczę się podstaw programowania i mam do zrobienia projekt, w którym na oknie głównym Form1 chciałbym tworzyć dynamicznie kontrolki. W programie, który zamieściłem poniżej mam już zaimplementowane rysowanie dynamiczne czterech zestawów etykiet. Za pomocą funkcji addlabel_a dodaję na Form1 największą etykietę, następnie na utworzonej etykiecie dodaje dwie mniejsze za pomocą funkcji addlabel_b i addlabel_c. Kolejnym krokiem jest dodanie zdarzeń do kontrolek, i tu pojawia się mój problem. Chciałbym, aby naciśnięcie. na label_a lub na etykiety znajdujące się na label_a: label_b oraz label_c powodowały zmianę lokalizacji etykiety label_a, która zawiera pozostałe etykiety. W kodzie poniżej mam możliwość zmiany pozycji etykiety label_a na obszarze Form1 oraz zmianę pozycji label_b oraz label_c na obszarze label_a. W skrócie, naciśnięcie i przesunięcie którejkolwiek zawszę ma przesuwać cały zestaw:label_a, label_b, label_c. W jaki sposób mogę rozwiązać problem przekazania obiektu label_a do zdarzeń dotyczących label_b oraz label_c? Program w załączniku. Dziękuję z góry za pomoc:)
public Form1()
{
InitializeComponent();
}
private Point firstPoint = new Point();
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 4; i++)
{
Label a = addlabel_a(i);
this.Controls.Add(a);
Label b = addlabel_b(i);
a.Controls.Add(b);
Label c = addlabel_c(i);
a.Controls.Add(c);
a.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Function_1);
a.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Function_2);
b.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Function_1);
b.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Function_2);
c.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Function_1);
c.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Function_2);
}
}
Label addlabel_a(int i)
{
Label l = new Label();
l.Name = "label_a" + i.ToString();
l.Text = "label_a" + i.ToString();
l.ForeColor = Color.White;
l.BackColor = Color.Green;
l.Font = new Font("Serif", 24, FontStyle.Bold);
l.Width = 250;
l.Height = 150;
l.TextAlign = ContentAlignment.MiddleCenter;
l.Margin = new Padding(5);
return l;
}
Label addlabel_b(int i)
{
Label l = new Label();
l.Name = "label_b" + i.ToString();
l.Text = "label_b" + i.ToString();
l.ForeColor = Color.White;
l.BackColor = Color.Pink;
l.Font = new Font("Serif", 24, FontStyle.Bold);
l.Width = 200;
l.Height = 40;
l.TextAlign = ContentAlignment.MiddleCenter;
l.Margin = new Padding(5);
l.Location = new Point(40, 20);
return l;
}
Label addlabel_c(int i)
{
Label l = new Label();
l.Name = "label_c" + i.ToString();
l.Text = "label_c" + i.ToString();
l.ForeColor = Color.White;
l.BackColor = Color.Yellow;
l.Font = new Font("Serif", 24, FontStyle.Bold);
l.Width = 70;
l.Height = 70;
l.TextAlign = ContentAlignment.MiddleCenter;
l.Margin = new Padding(5);
l.Location = new Point(20, 20);
return l;
}
private void Function_1(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
firstPoint = Control.MousePosition;
}
}
private void Function_2(object sender, MouseEventArgs e)
{
Label l = (Label)sender;
if (e.Button == MouseButtons.Left)
{
Point temp = Control.MousePosition;
Point res = new Point(firstPoint.X - temp.X, firstPoint.Y - temp.Y);
l.Location = new Point(l.Location.X - res.X, l.Location.Y - res.Y);
firstPoint = temp;
// Odświeżenie formy
this.Update();
}
}