Назад Вперед Зміст

Побудова графіків на формах

Приклад

Побудувати на формі графіки двох функцій: sin (x) та cos(x).

Значення лівої межі, правої межі та кроку вводимо у текстові поля.

При натисканні кнопки SIN будується графік функції y=sin(x). При натисканні кнопки COS будується графік функції y=cos(x).

При натисканні кнопки "Очистити" форма повністю очищається.

Розташуємо на формі текстові поля, написи та кнопки. Для побудови графіка використаємо елемент Chart з групи "Дані".

Результат:

Виділимо цей елемент та відкриємо його панель властивостей.

Деякі властивості:

Змінимо властивість Series для елемента chart1. Ця властивість описує серії даних, за якими ми будемо будувати графіки. Для цього натисніть на кнопку "...".

З'явиться вікно редактора колекції серій даних:

У нас буде два графіки в одній області, тому натисніть "Додати".

Тепер для кожної серії встановимо значення таких властивостей:

Перед тим, як ми напишемо обробники подій Click для кнопок, розглянемо деякі властивості, які ми будемо змінювати в програмі.

Графіки будуються на основі вмісту колекції Points. Ми будемо додавати значення в цю колекцію в процесі обчислення X та Y. Для цього ми використовуватимемо метод AddXY. Він додає одразу два значення: X та Y.

ChartAreas – масив областей, в яких будуються графіки. Використовуючи цю властивість, можна змінити стандартний вигляд.

А саме:

Axes – колекція осей області.

В тому числі, інтервал, на якому будується графік, та точки перетину осей. Ці властивості також будемо встановлювати в програмі.

Поля та конструктор

public partial class Form1 : Form
{
    private double a; // Початкове значення x
    private double b; // Кінцеве значення x
    private double h; // Крок

    public Form1()
    {
        InitializeComponent();
        InitializeChart(); // Додаткові налаштування графіка
    }

    private void InitializeChart()
    {
        // Ініціалізація серій та областей графіка, якщо вони не додані в дизайнері
        if (chart1.Series.Count == 0)
        {
            chart1.Series.Add("Series0");
            chart1.Series[0].ChartType = SeriesChartType.Line;
        }

        if (chart1.ChartAreas.Count == 0)
        {
            chart1.ChartAreas.Add(new ChartArea());
        }
    }
}

Обробник для кнопки SIN

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        // Зчитування даних з перевіркою
        if (!double.TryParse(textBox1.Text, out double a) ||
            !double.TryParse(textBox2.Text, out double b) ||
            !double.TryParse(textBox3.Text, out double h))
        {
            MessageBox.Show("Будь ласка, введіть коректні числові значення.", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

        if (h <= 0)
        {
            MessageBox.Show("Крок (h) має бути більше нуля.", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

        if (a > b)
        {
            MessageBox.Show("Початкове значення (a) має бути менше або дорівнювати кінцевому (b).", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

        // Перевірка наявності серії та області графіка
        if (chart1.Series.Count == 0 || chart1.ChartAreas.Count == 0)
        {
            MessageBox.Show("Графік не ініціалізовано. Додайте серію та область графіка.", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

        // Очищення графіка перед побудовою
        chart1.Series[0].Points.Clear();

        // Налаштування осей (приклад)
        chart1.ChartAreas[0].AxisX.Minimum = a;
        chart1.ChartAreas[0].AxisX.Maximum = b;
        chart1.ChartAreas[0].AxisX.Interval = (b - a) / 10; // Автоматичний інтервал

        // Побудова графіка
        for (double x = a; x <= b; x += h)
        {
            chart1.Series[0].Points.AddXY(x, Math.Sin(x));
        }

        // Оновлення графіка
        chart1.Update();
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Сталася помилка: {ex.Message}", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

Обробник для кнопки COS

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        // Зчитування даних з перевіркою
        double a, b, h;
        if (!double.TryParse(textBox1.Text, out a) ||
            !double.TryParse(textBox2.Text, out b) ||
            !double.TryParse(textBox3.Text, out h))
        {
            MessageBox.Show("Будь ласка, введіть коректні числові значення.");
            return;
        }

        if (h <= 0)
        {
            MessageBox.Show("Крок (h) має бути більше нуля.");
            return;
        }

        if (a > b)
        {
            MessageBox.Show("Початкове значення (a) має бути менше або дорівнювати кінцевому (b).");
            return;
        }

        // Перевірка наявності серії та області графіка
        if (chart1.Series.Count <= 1 || chart1.ChartAreas.Count <= 1)
        {
            MessageBox.Show("Графік або серія не ініціалізовані.");
            return;
        }

        // Очищення серії перед побудовою
        chart1.Series[1].Points.Clear();

        // Налаштування осей (приклад)
        chart1.ChartAreas[1].AxisX.Minimum = a;
        chart1.ChartAreas[1].AxisX.Maximum = b;
        chart1.ChartAreas[1].AxisX.Interval = h;

        // Побудова графіка
        for (double x = a; x <= b; x += h)
        {
            chart1.Series[1].Points.AddXY(x, Math.Cos(x));
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Сталася помилка: {ex.Message}");
    }
}

Обробник для кнопки Очищення

private void button3_Click(object sender, EventArgs e)
{
    // Очищення графіків
    if (chart1.Series.Count > 0)
    {
        chart1.Series[0].Points.Clear();
        if (chart1.Series.Count > 1)
        {
            chart1.Series[1].Points.Clear();
        }
    }

    // Очищення текстових полів
    foreach (var textBox in new[] { textBox1, textBox2, textBox3 })
    {
        textBox.Text = string.Empty;
    }
}

Назад Вперед Зміст