Це базовий клас для елементів форми. У нього є кілька похідних класів.
Усі об'єкти цього класу, а також об'єкти похідних класів мають спільні властивості, наприклад, text або name, а також властивості, що стосуються розташування або розміру елемента.
Похідні класи:
Об'єкти цих класів, крім успадкованих властивостей, мають власні властивості.
УСІ контроли (елементи форми) зберігаються в одному масиві Controls.
Об'єкти масиву можуть належати до різних класів, але всі вони є похідними класу Control.
При переміщенні контрола на форму, йому автоматично присвоюється індекс 0 в масиві, а індекси інших контролів збільшуються на 1.
Кількість контролів на формі зберігається в властивості Count.
Виведемо за допомогою StringBuilder() значення властивості Text для всіх контролів на даній формі.
Запускатимемо обробник події Click для кнопки ShowControlsInfoButton. Код обробника:
private void AnalyzeFormButton_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
foreach (Control control in this.Controls)
{
switch (control)
{
case Label label:
sb.AppendLine($"Label: {label.Text}");
break;
case RadioButton radio:
sb.AppendLine($"RadioButton: {radio.Text} (Checked: {radio.Checked})");
break;
case TextBox textBox:
case RichTextBox rtb:
sb.AppendLine($"TextBox: {control.Text}");
break;
case Button button:
sb.AppendLine($"Button: {button.Text}");
break;
}
}
MessageBox.Show(sb.ToString(), "Аналіз елементів форми",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Результат роботи:
| Тип | Текст | Статус |
|---|---|---|
| Label | Галл | - |
| Label | Цвет текста | - |
| RadioButton | красный | Unchecked |
| RadioButton | синий | Unchecked |
| RadioButton | зеленый | Checked |
| RadioButton | оранжевый | Unchecked |
| TextBox | Любой текст любой текст... | - |
| Label | Размер шрифта | - |
| RadioButton | 10 | Unchecked |
| RadioButton | 12 | Checked |
| RadioButton | 14 | Unchecked |
| RadioButton | 16 | Unchecked |
| Button | Изменить цвет текста | - |
| Button | Изменить размер шрифта | - |
Цей аналіз показує:
Для того, щоб з усього масиву вибирати тільки контроли певного типу використовується ключове слово is.
Ця конструкція дозволяє порівнювати типи об'єктів, щоб визначити, чи належить наш об'єкт певному типу.
Ця конструкція повертає або true або false.
Спробуємо з усього масиву контролів обробити (вивести значення властивості Text) тільки кнопки.
Код обробника:
private void ShowButtonsText_Click(object sender, EventArgs e)
{
StringBuilder buttonsInfo = new StringBuilder();
int buttonCount = 0;
foreach (Control control in Controls)
{
if (control is Button button && !string.IsNullOrEmpty(button.Text))
{
buttonsInfo.AppendLine($"Кнопка [{button.Name}]: {button.Text}");
buttonCount++;
}
}
if (buttonCount > 0)
{
MessageBox.Show(buttonsInfo.ToString(),
$"Знайдено кнопок: {buttonCount}",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else
{
MessageBox.Show("На формі не знайдено кнопок з текстом",
"Інформація",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
Виведем значення властивості Text для контролів, що знаходяться в межах контейнера groupBox1. Вони утворюють свій масив.
Для звернення до елементу всередині іншого елементу використовується конструкція з крапкою: groupBox1.Controls[i]
Код обробника:
private void ShowGroupBoxControls_Click(object sender, EventArgs e)
{
// Створюємо список для зберігання інформації про елементи
var controlsInfo = new StringBuilder();
int controlsCount = 0;
// Перебираємо всі елементи всередині GroupBox
foreach (Control control in groupBox1.Controls)
{
// Пропускаємо елементи без тексту
if (string.IsNullOrEmpty(control.Text))
continue;
controlsInfo.AppendLine($"{control.GetType().Name}: {control.Text}");
controlsCount++;
}
// Виводимо результат
if (controlsCount > 0)
{
MessageBox.Show(controlsInfo.ToString(),
$"Елементи в GroupBox (Знайдено: {controlsCount})",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else
{
MessageBox.Show("GroupBox не містить елементів з текстом",
"Інформація",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
Це все працює чудово, оскільки всі елементи мають властивість Text, яка успадковується від класу Control.
Для того, щоб використовувати властивості, які специфічні лише для певного типу контролу, потрібно виконати приведення до цього типу.
Для цього використовується ключове слово as.
Ця конструкція дозволяє перетворити об'єкт зліва від as у тип справа від as.
Наприклад: control as RadioButton
У цьому прикладі об'єкт з ім'ям control перетворюється на тип RadioButton
У випадку неможливості перетворити об'єкт до зазначеного типу, замість винятку ми отримаємо значення null.
Якщо нам знадобиться змінити шрифт, то доведеться створити новий шрифт за допомогою конструктора з параметрами.
Структура:
| Елемент.Font = new Font("назва шрифту", розмір, курсив); |
Наприклад:
| Зміна шрифту | Конструктор |
|---|---|
| Змінюється лише розмір шрифту на 14 | textBox1.Font = new Font("", 14); |
| Шрифт змінюється на Courier New і розмір змінюється на 16 | textBox1.Font = new Font("Courier New", 16); |
| Шрифт не змінюється, розмір змінюється на 12 + курсив | textBox1.Font = new Font("", 12, FontStyle.Italic); |
Користувач за допомогою двох груп радіокнопок вибирає колір та розмір для тексту в textBox. Для розміру 12 додає нахил, а для розміру 14 нахил та фон.



Ми переглядаємо контроли, щоб отримати властивості деяких з них (радіокнопок), щоб змінити властивості іншого (текстового поля)
Обробник ChangeTextColorButton_Click для кнопки "Змінити колір тексту"
private void ChangeTextColorButton_Click(object sender, EventArgs e)
{
// Перебір всіх елементів управління в групі groupBox1
foreach (Control control in groupBox1.Controls)
{
// Перевірка, чи елемент є RadioButton
if (control is RadioButton radioButton)
{
// Якщо радіокнопка вибрана
if (radioButton.Checked)
{
// Встановлення кольору тексту в textBox1 залежно від вибраної опції
switch (radioButton.Text)
{
case "красний":
textBox1.ForeColor = Color.Red;
break;
case "синій":
textBox1.ForeColor = Color.Blue;
break;
case "зелений":
textBox1.ForeColor = Color.Green;
break;
case "оранжевий":
textBox1.ForeColor = Color.Orange;
break;
// Додаткові кольори можна додати тут
default:
break;
}
// Вийти з циклу після знаходження вибраної кнопки
break;
}
}
}
}
Обробник для кнопки "Змінити розмір шрифту"
private void ChangeFontSizeButton_Click(object sender, EventArgs e)
{
// Перебір всіх елементів управління в групі groupBox2
foreach (Control control in groupBox2.Controls)
{
// Перевірка, чи елемент є RadioButton
if (control is RadioButton radioButton && radioButton.Checked)
{
// Встановлення шрифту в textBox1 залежно від вибраної опції
switch (radioButton.Text)
{
case "10":
textBox1.Font = new Font("Comic Sans MS", 10);
break;
case "12":
textBox1.Font = new Font(textBox1.Font.FontFamily, 12, FontStyle.Italic);
break;
case "14":
textBox1.Font = new Font(textBox1.Font.FontFamily, 14, FontStyle.Italic);
textBox1.BackColor = Color.Pink; // Додатковий стиль
break;
case "16":
textBox1.Font = new Font(textBox1.Font.FontFamily, 16);
break;
default:
// Залишаємо поточний шрифт, якщо немає відповідності
break;
}
// Вийти з циклу після знаходження вибраної кнопки
return;
}
}
}
На формі: 5 міток (порожніх), 5 текстових полів, 2 радіокнопки для вибору завдання (змінювати мітки або поля), 2 кнопки: "Змінити" і "Відновити".
Якщо вибрати радіокнопку "Мітки" і натиснути кнопку "Змінити", то в усі мітки повинен вивестись рядок "абвгдеж" шрифтом Courier New, розміром 14 та нахилом.
Якщо вибрати радіокнопку "Поля" і натиснути кнопку "Змінити", то в усі текстові поля повинен вивестись рядок "абвгдеж".
Якщо натиснути кнопку "Відновити", то всі мітки і текстові поля очищаються, а виділення з радіокнопок знімається.

Обробник кнопки "Змінити на"
private void UpdateControlsButton_Click(object sender, EventArgs e)
{
const string defaultText = "a6srдеж"; // Текст для встановлення
// Перебір всіх елементів форми
foreach (Control control in this.Controls)
{
// Якщо вибрано "Метки" і елемент є Label
if (radioButton1.Checked && control is Label label)
{
// Оновлюємо властивості Label
label.Text = defaultText;
label.Font = new Font("Courier New", 14, FontStyle.Italic);
}
// Якщо вибрано "Поля" і елемент є TextBox
else if (radioButton2.Checked && control is TextBox textBox)
{
// Оновлюємо властивості TextBox
textBox.Text = defaultText;
}
}
}
Обробник кнопки "Відновити"
private void ClearFormButton_Click(object sender, EventArgs e)
{
// Перебір всіх елементів управління на формі
foreach (Control control in this.Controls)
{
// Очищення тексту в TextBox та Label
if (control is TextBox || control is Label)
{
control.Text = string.Empty;
}
// Вимкнення всіх RadioButton
if (control is RadioButton radioButton)
{
radioButton.Checked = false;
}
}
}