Клас Controls є одним з найважливіших класів у Windows Forms. Елементи цього класу можна створювати як в конструкторі Visual Studio, так і програмно.
Назви та призначення властивостей елементів цього класу можна переглянути на панелі Властивості в конструкторі Visual Studio.
Елементи можна створювати в конструкторі класу Form1, або в обробнику події Load для форми.
Завдання:

Отже, в класі Form1 ми повинні створити поле типу Button, змінити існуючий конструктор та додати обробник події Click.
Вміст класу Form1 в згорнутому вигляді:
public partial class Form1 : Form
{
// Оголошення елемента керування кнопкою
private Button myButton; // Приватне поле для кнопки
// Конструктор форми
public Form1()
{
InitializeComponent();
// Ініціалізація та налаштування кнопки
myButton = new Button();
myButton.Text = "Натисни мене";
myButton.Size = new Size(120, 40);
myButton.Location = new Point(50, 50);
// Підписка на подію Click
myButton.Click += MyButton_Click;
// Додавання кнопки на форму
this.Controls.Add(myButton);
}
// Обробник події Click для кнопки
private void MyButton_Click(object sender, EventArgs e)
{
MessageBox.Show("Кнопку було натиснуто!",
"Повідомлення",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
Конструктор:
public Form1() // Конструктор класу форми
{
InitializeComponent(); // Ініціалізація компонентів форми
// Налаштування властивостей форми
this.Text = "Моя форма";
this.Size = new Size(300, 300);
this.StartPosition = FormStartPosition.CenterScreen; // Центрування форми на екрані
// Ініціалізація кнопки
myButton = new Button();
// Налаштування властивостей кнопки
myButton.Text = "Натисни мене!";
myButton.Size = new Size(100, 50); // Краще використовувати Size замість окремих Width/Height
myButton.Location = new Point(100, 100); // Краще використовувати Location замість окремих Top/Left
myButton.Font = new Font("Arial", 10, FontStyle.Bold); // Додано стиль тексту
myButton.BackColor = Color.LightBlue; // Колір фону
myButton.ForeColor = Color.DarkBlue; // Колір тексту
// Додавання обробника події Click
myButton.Click += MyButton_Click;
// Додавання кнопки на форму
this.Controls.Add(myButton);
}
// Обробник події натискання кнопки
private void MyButton_Click(object sender, EventArgs e)
{
MessageBox.Show("Ви натиснули кнопку!",
"Повідомлення",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Тут ми використали властивості: висота, ширина, розмір (форми), розташування кнопки на формі, напис на кнопці (у заголовку форми).
Обробник події Click для створеної кнопки:
private void MyButton_Click(object sender, EventArgs e)
{
// Обробник події Click для кнопки
// Зміна тексту кнопки
myButton.Text = "Натиснуто";
// Зміна кольору тексту кнопки
myButton.ForeColor = Color.BlueViolet;
// Додаткові зміни для візуального ефекту
myButton.BackColor = Color.LightYellow; // Зміна кольору фону
myButton.Font = new Font(myButton.Font, FontStyle.Bold | FontStyle.Italic); // Зміна стилю шрифту
// Тимчасове блокування кнопки після натискання
myButton.Enabled = false;
// Відновлення кнопки через 1 секунду
Timer timer = new Timer();
timer.Interval = 1000; // 1 секунда
timer.Tick += (s, args) =>
{
myButton.Enabled = true;
myButton.Text = "Натисни знову";
timer.Stop();
timer.Dispose();
};
timer.Start();
}
Завдання:

Отже, в класі Form1 ми повинні створити поле типу масив кнопок і, не змінюючи існуючий конструктор класу, додати обробники події Load для форми та Click для кожної кнопки створеного масиву кнопок.
Вміст класу Form1 в згорнутому вигляді:
public partial class Form1 : Form
{
// Масив кнопок (4 елементи)
private Button[] buttons = new Button[4];
// Конструктор форми
public Form1()
{
InitializeComponent();
}
// Обробник події завантаження форми
private void Form1_Load(object sender, EventArgs e)
{
// Розміри та позиція кнопок
int buttonWidth = 100;
int buttonHeight = 50;
int startX = 50;
int startY = 50;
int spacing = 20;
// Ініціалізація кнопок
for (int i = 0; i < buttons.Length; i++)
{
buttons[i] = new Button();
// Налаштування властивостей кнопки
buttons[i].Text = $"Кнопка {i + 1}";
buttons[i].Size = new Size(buttonWidth, buttonHeight);
buttons[i].Location = new Point(startX, startY + i * (buttonHeight + spacing));
buttons[i].BackColor = Color.LightBlue;
buttons[i].ForeColor = Color.DarkBlue;
buttons[i].Font = new Font("Arial", 10, FontStyle.Bold);
// Підписка на подію Click
buttons[i].Click += Button_Click;
// Додавання кнопки на форму
this.Controls.Add(buttons[i]);
}
}
// Обробник події Click для всіх кнопок
private void Button_Click(object sender, EventArgs e)
{
Button clickedButton = (Button)sender;
// Зміна кольору натиснутої кнопки
clickedButton.BackColor = Color.LightGreen;
clickedButton.Text = "Натиснуто!";
// Повідомлення з інформацією про кнопку
MessageBox.Show($"Ви натиснули: {clickedButton.Text.Replace("!", "")}",
"Повідомлення",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
// Відновлення початкового стану через 1 секунду
Timer timer = new Timer();
timer.Interval = 1000;
timer.Tick += (s, args) =>
{
clickedButton.BackColor = Color.LightBlue;
clickedButton.Text = clickedButton.Text.Replace("Натиснуто!", clickedButton.Text.Contains("1") ? "Кнопка 1" :
clickedButton.Text.Contains("2") ? "Кнопка 2" :
clickedButton.Text.Contains("3") ? "Кнопка 3" : "Кнопка 4");
timer.Stop();
timer.Dispose();
};
timer.Start();
}
}
Обробник події Load для форми:
private void Form1_Load(object sender, EventArgs e)
{
// Налаштування розмірів форми
this.Size = new Size(320, 200);
this.Text = "Гра з кнопками"; // Додано заголовок форми
this.BackColor = Color.LightGray; // Колір фону форми
// Ініціалізація генератора випадкових чисел
Random random = new Random();
// Створення 4 кнопок
for (int i = ibr0; i < 4; i++)
{
// Генерація випадкового числа від 1 до 9
int randomNumber = random.Next(1, 10);
// Ініціалізація кнопки
btn[i] = new Button();
// Налаштування властивостей кнопки
btn[i].Text = randomNumber.ToString();
btn[i].Size = new Size(50, 50);
btn[i].Location = new Point(20 + 70 * i, 20);
btn[i].Font = new Font("Arial", 14, FontStyle.Bold);
btn[i].BackColor = GetRandomColor(random); // Випадковий колір кнопки
// Підписка на подію Click
btn[i].Click += Button_Click;
}
// Додавання всіх кнопок на форму
this.Controls.AddRange(btn);
}
// Додатковий метод для генерації випадкового кольору
private Color GetRandomColor(Random rand)
{
return Color.FromArgb(rand.Next(150, 256),
rand.Next(150, 256),
rand.Next(150, 256));
}
// Обробник події Click для кнопок
private void Button_Click(object sender, EventArgs e)
{
Button clickedButton = (Button)sender;
// Збільшення числа на кнопці на 1
if (int.TryParse(clickedButton.Text, out int number))
{
number = (number % 9) + 1; // Циклічне збільшення від 1 до 9
clickedButton.Text = number.ToString();
// Зміна кольору кнопки
clickedButton.BackColor = GetRandomColor(new Random());
}
}
Властивість Location задає координати лівого верхнього кута кнопки відносно лівого верхнього кута форми. Координати залежать від індексу кнопки в масиві кнопок та її розміру.
Обробник події Click для i-ої кнопки:
private void Button_Click(object sender, EventArgs e)
{
// Отримуємо кнопку, на яку натиснули
Button clickedButton = sender as Button;
if (clickedButton != null && !string.IsNullOrEmpty(clickedButton.Text))
{
try
{
// Перетворюємо текст кнопки в число
int number = int.Parse(clickedButton.Text);
// Подвоюємо значення
number *= 2;
// Якщо число стає більше 100, починаємо знову з 1
if (number > 100)
{
number = 1;
}
// Оновлюємо текст кнопки
clickedButton.Text = number.ToString();
// Змінюємо колір кнопки
Color newColor = Color.FromArgb(
Math.Min(255, 50 + number * 2),
Math.Min(255, 100 - number),
Math.Min(255, 50 + number)
);
clickedButton.BackColor = newColor;
clickedButton.ForeColor = Color.White;
// Збільшуємо розмір шрифту
clickedButton.Font = new Font(clickedButton.Font.FontFamily,
Math.Min(20, 10 + number/10),
FontStyle.Bold);
}
catch (FormatException)
{
MessageBox.Show("Текст на кнопці не є числом!",
"Помилка",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}