Как Работать С Windows Forms — Создаем Трекер Привычек Пошагово

Кратко:

  • Создаём проект Windows Forms в VS 2026.
  • Настраиваем UI: TextBox, Buttons, DataGridView, DateTimePicker, Chart.
  • Пишем логику на C#, сохраняем данные в JSON.
  • Связываем события, публикуем .exe и получаем готовый трекер.

Если вам нужно быстро собрать приложение‑трекер привычек, следуйте 7‑шаговому плану: Как работать с Windows Forms — создаем трекер привычек пошагово.

Шаг 1. Подготовка среды разработки и создание проекта

Откройте Visual Studio 2026. В стартовом окне выберите Создать новый проект, в поиске введите winforms и выберите шаблон Приложение Windows Forms (.NET Framework) для C#. Укажите имя HabitTracker и нажмите Создать. Это первая часть того, как работать с Windows Forms — создаем трекер привычек пошагово.

Проверка обязательных компонентов

  • .NET Framework 4.8 (или новее).
  • Пакет System.Windows.Forms уже включён.
  • Убедитесь, что в меню Среда → Параметры → Система включён Режим совместимости для Windows 10‑12.

Шаг 2. Установка NuGet‑пакетов и планировка интерфейса

В Обозревателе решений кликните правой кнопкой по проекту → Управление пакетами NuGet. На вкладке Обзор установите:

  • System.Windows.Forms.DataVisualization – графики.
  • Newtonsoft.Json – работа с JSON‑файлом.

После установки откройте Toolbox (CTRL+ALT+X) и разместите элементы:

  • TextBox — txtHabitName.
  • Button — btnAdd, btnDelete, btnMark.
  • DataGridView — dgvHabits.
  • DateTimePicker — dtpDate.
  • Chart — chartProgress.

Разделите форму на две колонки: слева – ввод и кнопки, справа – таблица, а внизу разместите график. Такой макет помогает увидеть, как работать с Windows Forms — создаем трекер привычек пошагово, без ощущения «захламленности».

Шаг 3. Моделирование данных: класс Habit и хранение в JSON

Создайте в проекте файл Habit.cs и добавьте:

public class Habit
{
    public string Name { get; set; }
    public DateTime Date { get; set; }
    public bool IsCompleted { get; set; }
}

Список List<Habit> habits будет хранить все записи в памяти, а путь habits.json — в файле рядом с .exe. Этот подход, описанный в нашем руководстве, реализует принцип «как работать с Windows Forms — создаем трекер привычек пошагово» без внешних БД.

Шаг 4. Реализация бизнес‑логики в Form1.cs

Откройте конструктор формы, дважды кликните по пустому месту – откроется Form1.cs. Замените содержимое следующим кодом (компактно, но полностью):

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using Newtonsoft.Json;
using System.Windows.Forms.DataVisualization.Charting;

namespace HabitTracker
{
    public partial class Form1 : Form
    {
        private List<Habit> habits = new List<Habit>();
        private readonly string filePath = "habits.json";

        public Form1()
        {
            InitializeComponent();
            LoadData();
            dtpDate.ValueChanged += dtpDate_ValueChanged;
            UpdateChart();
        }

        private void LoadData()
        {
            if (File.Exists(filePath))
            {
                var json = File.ReadAllText(filePath);
                habits = JsonConvert.DeserializeObject<List<Habit>>(json) ?? new List<Habit>();
            }
            RefreshGrid();
        }

        private void SaveData()
        {
            var json = JsonConvert.SerializeObject(habits, Formatting.Indented);
            File.WriteAllText(filePath, json);
        }

        private void RefreshGrid()
        {
            dgvHabits.DataSource = null;
            dgvHabits.DataSource = habits;
            if (dgvHabits.Columns.Count > 0)
            {
                dgvHabits.Columns["Name"].HeaderText = "Привычка";
                dgvHabits.Columns["Date"].HeaderText = "Дата";
                dgvHabits.Columns["IsCompleted"].HeaderText = "Выполнено";
                dgvHabits.Columns["Date"].DefaultCellStyle.Format = "dd.MM.yyyy";
                dgvHabits.Columns["IsCompleted"].ReadOnly = true;
                dgvHabits.Columns["IsCompleted"].DefaultCellStyle.NullValue = false;
                dgvHabits.Columns["IsCompleted"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            }
            UpdateChart();
        }

        private void UpdateChart()
        {
            chartProgress.Series.Clear();
            var series = chartProgress.Series.Add("Прогресс");
            series.ChartType = SeriesChartType.Column;
            var selected = dtpDate.Value.Date;
            var dayHabits = habits.Where(h => h.Date == selected).ToList();
            double percent = 0;
            if (dayHabits.Any())
                percent = dayHabits.Count(h => h.IsCompleted) * 100.0 / dayHabits.Count;
            series.Points.AddXY(selected.ToShortDateString(), percent);
            chartProgress.ChartAreas[0].AxisX.Title = "Дата";
            chartProgress.ChartAreas[0].AxisY.Title = "% выполнения";
            chartProgress.ChartAreas[0].AxisY.Maximum = 100;
            chartProgress.ChartAreas[0].AxisY.Minimum = 0;
        }

        private void dtpDate_ValueChanged(object sender, EventArgs e) => UpdateChart();

        private void btnAdd_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txtHabitName.Text))
            {
                MessageBox.Show("Введите название привычки!");
                return;
            }
            habits.Add(new Habit
            {
                Name = txtHabitName.Text,
                Date = dtpDate.Value.Date,
                IsCompleted = false
            });
            SaveData();
            RefreshGrid();
            txtHabitName.Clear();
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (dgvHabits.CurrentRow?.DataBoundItem is Habit h)
            {
                habits.Remove(h);
                SaveData();
                RefreshGrid();
            }
        }

        private void btnMark_Click(object sender, EventArgs e)
        {
            if (dgvHabits.CurrentRow?.DataBoundItem is Habit h)
            {
                h.IsCompleted = !h.IsCompleted;
                SaveData();
                RefreshGrid();
            }
        }
    }
}

Эти 7 ключевых методов показывают, как работать с Windows Forms — создаем трекер привычек пошагово, полностью покрывая CRUD‑операции и визуализацию.

Шаг 5. Привязка событий к элементам управления

Перейдите в дизайнер формы, выберите каждую кнопку, откройте окно Свойства → События (молния) и укажите:

  • btnAdd → Click = btnAdd_Click
  • btnDelete → Click = btnDelete_Click
  • btnMark → Click = btnMark_Click

Это завершающий этап того, как работать с Windows Forms — создаем трекер привычек пошагово, позволяя UI‑элементам управлять бизнес‑логикой.

Шаг 6. Тестирование и отладка

Запустите проект (F5). Проверьте:

  1. Ввод названия в txtHabitName и нажмите Добавить → строка появляется в dgvHabits.
  2. Выберите строку и нажмите Отметить → галочка меняется, график обновляется.
  3. Удалите запись → её больше нет в таблице и файле JSON.

Если что‑то не работает, откройте окно Output и ищите исключения. Такие мелкие правки часто встречаются в реальном опыте создания Windows‑приложений.

Шаг 7. Публикация готового .exe

В решении кликните правой кнопкой → Опубликовать. Выберите профиль «Папка», укажите каталог, нажмите Опубликовать. В результате получите набор файлов, среди которых HabitTracker.exe. Теперь можно копировать приложение на любой ПК без установки Visual Studio.

Эти семь шагов полностью отвечают на вопрос, как работать с Windows Forms — создаем трекер привычек пошагово, и дают готовый продукт за пару часов.

Таблица сравнения подходов к хранению данных

МетодТребуемый кодНагрузка на приложениеНужна внешняя СУБД?
JSON‑файлNewtonsoft.Json + File I/OНизкая (меньше 10 KB для 100 записей)Нет
SQLiteSystem.Data.SQLite + SQL‑запросыСредняя (пакет ~300 KB)Нет, но нужен движок
SQL Server ExpressEntity Framework + миграцииВысокая (требует установки сервера)Да

Типичные ошибки и как их избежать (E‑E‑A‑T)

Ошибка 1. Не сохраняются изменения после закрытия

Причина: забыли вызвать SaveData() после изменения списка. Добавьте вызов в каждый обработчик (Add, Delete, Mark).

Ошибка 2. Дата в графике отображается неверно

Причина: dtpDate.Value возвращает время, а сравнение происходит с датой без времени. Убедитесь, что используете .Date.

Ошибка 3. Приложение падает при пустом JSON

Причина: попытка десериализовать пустой файл. Проверьте File.Exists и задайте habits = new List<Habit>() при отсутствии данных.

Где искать помощь и обновления

  • Официальная документация Microsoft по Windows Forms (2026 г.)
  • GitHub‑репозиторий Newtonsoft.Json – примеры сериализации.
  • Stack Overflow: тег #winforms для вопросов о событиях и привязке данных.

Итог: следуя этим 7 шагам, вы быстро освоите, как работать с Windows Forms — создаем трекер привычек пошагово, получив лёгкое, самодостаточное приложение, которое сохраняет данные в JSON и визуализирует прогресс.

FAQ

Можно ли использовать .NET 6 вместо .NET Framework?
Да, процесс почти идентичен, только в NuGet‑пакетах замените System.Windows.Forms.DataVisualization на совместимый для .NET 6.
Где хранится файл habits.json?
Он находится в папке рядом с исполняемым файлом HabitTracker.exe. При первом запуске будет создан автоматически.
Можно ли добавить уведомления о предстоящих привычках?
Да, используйте System.Threading.Timer вместе с NotifyIcon для вывода всплывающих подсказок.
Как экспортировать данные в Excel?
Сериализуйте список в CSV через StringBuilder и сохраните через SaveFileDialog – Excel откроет файл без проблем.
Поддерживает ли приложение многопользовательскую работу?
Для совместного доступа понадобится серверная база (например, SQLite через сетевой путь) – базовый JSON‑подход рассчитан на одного пользователя.

Интересно почитать :

Иранские хакеры атакуют системы управления США: новая эскалация киберугрозы
Иранские хакеры атакуют системы управления США: новая эскалация киберугрозы

Ключевые выводы Иранские государственные хакеры начали целенаправленно атаковать системы управления критической инфраструктурой США (вода, энергетика, местные власти), чтобы вызвать реальные сбои. Атаки сосредоточены на взломе промышленных контроллеров (SCADA и PLC), …

SpaceX готовится к историческому IPO: $1.5 трлн оценка и планы колонизации Марса
SpaceX готовится к историческому IPO: $1.5 трлн оценка и планы колонизации Марса

Июнь 2026 года может стать поворотным моментом в истории частного космоса: источники Financial Times сообщают о подготовке SpaceX к крупнейшему IPO за последние годы. Особый интерес вызывает не только запланированный …

World — новый уровень проверки личности: от Orb до Tinder и концертных билетов
World — новый уровень проверки личности: от Orb до Tinder и концертных билетов

Ключевые выводы World представил три уровня верификации: Orb‑сканирование радужки, проверка государственных ID и «Selfie Check». Технология будет интегрирована в Tinder, Zoom, Docusign и концертные системы Ticketmaster и Eventbrite. Компания расширяет …

Как установить встраиваемую кухонную вытяжку: пошаговая инструкция
Как установить встраиваемую кухонную вытяжку: пошаговая инструкция

Кратко: Правильная высота установки: 650-750 мм от варочной поверхности Выбор режима работы: выброс предпочтительнее, но требует отдельного канала Три этапа монтажа: подготовка шкафчика, крепление вытяжки, подключение воздуховода Инструменты: дрель, шуруповерт, …

Аномалия на вторичном рынке: почему акции Anthropic в дефиците, а OpenAI теряют
спрос, и SpaceX готовится к рекордному IPO
Аномалия на вторичном рынке: почему акции Anthropic в дефиците, а OpenAI теряют спрос, и SpaceX готовится к рекордному IPO

Ключевые выводы Спрос на акции Anthropic на вторичном рынке взлетел до небес, продавцов почти нет, а конфликт с Пентагоном не навредил, а помог бренду. Ситуация с OpenAI противоположна: предложение акций …

Amazon запускает OpenAI‑модели в AWS Bedrock: что это значит для бизнеса и
конкуренции с Microsoft
Amazon запускает OpenAI‑модели в AWS Bedrock: что это значит для бизнеса и конкуренции с Microsoft

Ключевые выводы AWS Bedrock теперь включает модели OpenAI (GPT‑4, Codex и новые агентные модели), что открывает доступ к передовым ИИ‑инструментам без необходимости отдельного API‑ключа. Amazon представил сервис Bedrock Managed Agents …

ФильтрИзбранноеМеню43750 ₽
Top