Створимо додаток для обчислення площі квадрата.
Прикрасимо форму малюнком та змінимо колір фону та колір тексту.
Сторону квадрата (ціле число) будемо вводити в текстове поле.
При натисканні кнопки "Обчислити", в інше текстове поле має виводитися площа квадрата з введеною стороною.

При натисканні кнопки "Очистити", форма має очищуватися.
Додаток має бути розроблений таким чином, щоб в перше текстове поле вводилися лише натуральні числа. Окрім цифр будь-які інші символи не допускаються.
Додаток має бути розроблений таким чином, щоб якщо текстове поле не заповнене, то при натисканні кнопки "Обчислити" у спеціальному вікні виводилось повідомлення.
У конструкторі форми створимо:
Змінимо властивості форми та її елементів згідно з малюнком.
При перетягуванні елементів не виконуйте на них подвійний клік. Створюються зайві обробники подій Click для цих елементів.
Згідно умови, в текстове поле textBox1 повинні вводитися лише натуральні числа. Окрім цифр будь-які інші символи не допускаються.
Тому до події KeyPress для елемента textBox1 прив'яжемо відповідний обробник.
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// Дозволяємо лише цифри, Backspace (для видалення) та Control (для Ctrl+C/Ctrl+V)
if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b' && !char.IsControl(e.KeyChar))
{
e.Handled = true; // Блокуємо символ
}
}
Якщо потрібно дозволити додаткові символи (наприклад, крапку для десяткових чисел):
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) &&
e.KeyChar != '\b' &&
e.KeyChar != '.' &&
!char.IsControl(e.KeyChar))
{
e.Handled = true;
}
}
Для більш складної валідації можна використати регулярні вирази:
private void TextBox1_Validating(object sender, CancelEventArgs e)
{
if (!Regex.IsMatch(textBox1.Text, @"^\d+$"))
{
errorProvider1.SetError(textBox1, "Дозволено лише цифри");
e.Cancel = true;
}
else
{
errorProvider1.SetError(textBox1, "");
}
}
Для повноцінної обробки введення чисел додайте обробник події TextChanged:
private void TextBox1_TextChanged(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
// Обробка пустого поля
}
}
Обробник події Click кнопки clearButton має очищати поля textBox1 і textBox2.
private void ClearButton_Click(object sender, EventArgs e)
{
// Очищення основних текстових полів
textBox1.Clear();
textBox2.Clear();
// Додатково: скидання інших елементів форми
checkBox1.Checked = false;
checkBox2.Checked = false;
radioButton1.Checked = false;
radioButton2.Checked = false;
comboBox1.SelectedIndex = -1;
comboBox1.Text = string.Empty;
// Повернення фокусу на перше поле
textBox1.Focus();
}
Якщо потрібно очистити всі поля форми:
private void ClearAllFields()
{
foreach (Control control in this.Controls)
{
if (control is TextBox)
((TextBox)control).Clear();
else if (control is ComboBox)
((ComboBox)control).SelectedIndex = -1;
else if (control is CheckBox)
((CheckBox)control).Checked = false;
// Аналогічно для інших типів контролів
}
textBox1.Focus();
}
З використанням діалогового підтвердження:
private void ClearButton_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Очистити всі поля?", "Підтвердження",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
textBox1.Clear();
textBox2.Clear();
// Інші поля...
}
}
Обробник події Click кнопки calculateSquareButton повинен зчитувати число з поля textBox1, обчислювати площу квадрата і записувати результат в елемент textBox2.
private void CalculateSquareButton_Click(object sender, EventArgs e)
{
// Перевірка на пусте введення
if (string.IsNullOrWhiteSpace(textBox1.Text))
{
MessageBox.Show("Будь ласка, введіть довжину сторони квадрата",
"Помилка введення",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
textBox1.Focus();
return;
}
// Спроба конвертації та обчислення
if (int.TryParse(textBox1.Text, out int sideLength))
{
try
{
// Обчислення площі квадрата з перевіркою переповнення
int squareArea = checked(sideLength * sideLength);
textBox2.Text = squareArea.ToString();
}
catch (OverflowException)
{
MessageBox.Show("Введене число занадто велике для обчислення",
"Помилка обчислення",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
textBox1.SelectAll();
textBox1.Focus();
}
}
else
{
MessageBox.Show("Будь ласка, введіть коректне ціле число",
"Невірний формат",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
textBox1.SelectAll();
textBox1.Focus();
}
}
if (long.TryParse(textBox1.Text, out long sideLength))
{
long squareArea = checked(sideLength * sideLength);
textBox2.Text = squareArea.ToString();
}
//Додати обмеження на введення лише цифр (як у попередньому прикладі):
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && e.KeyChar != '\b' && !char.IsControl(e.KeyChar))
{
e.Handled = true;
}
}
//Додати підтримку десяткових чисел:
if (double.TryParse(textBox1.Text, out double sideLength))
{
double squareArea = sideLength * sideLength;
textBox2.Text = squareArea.ToString("F2"); // 2 знаки після коми
}
Для обробки винятків (якщо поле textBox1 не заповнено) використовується інструкція try-catch.
Задамо фон у вигляді будь-якого малюнка.
Значення аргументів x і y (дійсні числа) будемо вводити в два текстові поля.
При введенні дійсного числа в текстове поле ціла частина від дробової має бути розділена КОМОЮ, а не крапкою.
При натисканні на кнопку "Обчислити" в третє текстове поле має виводитися значення функції z
з точністю до трьох знаків після коми.
При натисканні на кнопку "Очистити", форма має очищатися.
Додаток має бути спроектований таким чином, щоб у перші два текстові поля вводилися лише дійсні числа, додатні або від'ємні. У поля не повинні вводитися жодні інші символи.
Додаток має бути спроектований таким чином, щоб якщо хоча б одне текстове поле не заповнено, то після натискання кнопки "Обчислити" в спеціальному вікні виводилось повідомлення.
У конструкторі форми створимо:
Змінимо властивості форми та її елементів відповідно до малюнка.
Згідно з умовою, у текстові поля textBox1 і textBox2 мають вводитися лише дійсні числа, додатні або від'ємні. Жодні інші символи не повинні вводитися.
Тому до події KeyPress для елементів textBox1 і textBox2 прив'яжемо відповідний обробник подій.
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
var textBox = (TextBox)sender;
string currentText = textBox.Text;
int cursorPosition = textBox.SelectionStart;
// Дозволені символи
bool isDigit = char.IsDigit(e.KeyChar);
bool isDecimalSeparator = e.KeyChar == ',' || e.KeyChar == '.';
bool isSign = e.KeyChar == '-' || e.KeyChar == '+';
bool isBackspace = e.KeyChar == '\b';
bool isControlChar = char.IsControl(e.KeyChar);
// Заборона введення, якщо:
if (!(isDigit || isBackspace || isControlChar ||
(isDecimalSeparator && !currentText.Contains(",") && cursorPosition != 0) ||
(isSign && cursorPosition == 0 && !currentText.StartsWith("-") && !currentText.StartsWith("+"))))
{
e.Handled = true;
return;
}
// Автоматична заміна крапки на кому
if (e.KeyChar == '.')
{
e.KeyChar = ',';
}
}
Для повної валідації додайте обробник події Validating:
private void TextBox1_Validating(object sender, CancelEventArgs e)
{
if (!decimal.TryParse(textBox1.Text, NumberStyles.Any, CultureInfo.CurrentCulture, out _))
{
errorProvider1.SetError(textBox1, "Введіть коректне число");
e.Cancel = true;
}
else
{
errorProvider1.SetError(textBox1, "");
}
}
Для обмеження кількості десяткових знаків:
if (isDecimalSeparator && currentText.Split(',').Length > 1)
{
e.Handled = true;
}
Для обмеження довжини введення:
csharp
if (currentText.Length >= 10 && !isBackspace && !isControlChar)
{
e.Handled = true;
}
Обробник події Click для кнопки clearButton має очищати поля textBox1, textBox2 і textBox3.
private void ClearButton_Click(object sender, EventArgs e)
{
// Очищення всіх текстових полів
ClearTextBoxes();
}
private void ClearTextBoxes()
{
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
// Повернення фокусу на перше поле
textBox1.Focus();
}
Обробник події Click для кнопки calculateButton має зчитувати X з поля textBox1, Y з поля textBox2, обчислювати Z і записувати результат у елемент textBox3 з точністю до трьох знаків після коми.
private void CalculateButton_Click(object sender, EventArgs e)
{
// Валідація введених даних
if (!ValidateInputs(out double x, out double y))
{
return;
}
try
{
// Обчислення за формулою: √(x⁴ + |y|) + (|x + y|)² / (√(x² + 1) + 1)
double numerator = Math.Pow(Math.Abs(x + y), 2);
double denominator = Math.Sqrt(x * x + 1) + 1;
double z = Math.Sqrt(Math.Pow(x, 4) + Math.Abs(y)) + numerator / denominator;
// Відображення результату з округленням до 3 знаків
textBox3.Text = Math.Round(z, 3).ToString(CultureInfo.InvariantCulture);
}
catch (OverflowException)
{
ShowError("Помилка переповнення. Введені числа занадто великі.");
}
catch (Exception ex)
{
ShowError($"Виникла помилка: {ex.Message}");
}
}
private bool ValidateInputs(out double x, out double y)
{
x = y = 0;
if (!double.TryParse(textBox1.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out x))
{
ShowError("Будь ласка, введіть коректне число у перше поле");
textBox1.Focus();
return false;
}
if (!double.TryParse(textBox2.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out y))
{
ShowError("Будь ласка, введіть коректне число у друге поле");
textBox2.Focus();
return false;
}
return true;
}
private void ShowError(string message)
{
MessageBox.Show(message, "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Для вхідних даних:
x = 2
y = 3
Результат буде: 8.333
Формула обчислює:
√(2⁴ + |3|) + (|2 + 3|)² / (√(2² + 1) + 1) = √(16 + 3) + 25 / (√5 + 1) ≈ 4.3589 + 6.8829 ≈ 11.242
Для виведення значення Z з точністю до трьох знаків після коми використовується функція округлення Round.
Для обробки виключень:
використовується конструкція try-catch.Конкретні блоки catch для різних типів помилок
Використано окремий метод для відображення помилок
Використано CultureInfo.InvariantCulture для коректного форматування чисел.Округлення до 3 знаків після коми
Автоматичний фокус на поле з помилкою