【タスク管理アプリを作る】①タスクを登録する機能を作る。

SES企業で働いています。C#歴2年です。
タスク管理アプリを作って勉強中です。

私の知識だとこのようなコードになります。
というのを何となく分かって貰えればと思います。（誰に？！）
また、これがもし参考になれば幸いです。

ちなみに、デザインパターンとか知識が少ないので何も考えてません。
エラーチックなどは追加する予定です。

現在の実装状況。
■仕様
・メイン画面
タスク登録画面呼び出す。
登録されているタスク一覧を表示する。

・タスク登録画面
タスクID、名前、説明、状態を設定し登録する。
閉じるボタンで画面を閉じる。

・その他
同じタスクIDのタスク登録不可。

■コード説明
MainForm...メイン画面
RegistTaskForm...タスク登録画面
TaskDataManager...登録したタスクデータ管理

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545817/241d6231-93eb-4bc2-840b-49d6b3abb035.png)
```CS:MainForm.cs
namespace KT_TaskManage
{
    public partial class MainForm : Form
    {
        readonly TaskDataManager _data = new();

        public MainForm()
        {
            InitializeComponent();
            UpdateTaskList();
        }

        private void RegistTaskButton_Click(object sender, EventArgs e)
        {
            using (var f = new RegistTaskForm(_data))
            {
                f.ShowDialog();
                UpdateTaskList();
            }
        }

        private void CloseButton_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void UpdateTaskList()
        {
            listBox1.Items.Clear();
            for (int i = 0; i < _data.GetTaskCount(); i++)
            {
                listBox1.Items.Add(_data.GetTaskName(i));
            }
        }
    }
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545817/57a005af-7c8e-7487-1a8b-a5caf04418a2.png)

```CS:RegistTaskForm.cs
namespace KT_TaskManage
{
    public partial class RegistTaskForm : Form
    {
        readonly TaskDataManager _data;

        public RegistTaskForm(TaskDataManager data)
        {
            InitializeComponent();

            _data = data;

            radioButton1.Checked = true;
            radioButton2.Checked = false;

            TaskIdNumericUpDown.Minimum = 0;
            TaskIdNumericUpDown.Maximum = 100;
        }

        private void CancelButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void RegistButton_Click(object sender, EventArgs e)
        {
            if (!CheckValid(out var message))
            {
                MessageBox.Show(message, "エラー", MessageBoxButtons.OK);
                return;
            }

            var taskData = new TaskData(
                decimal.ToInt32(TaskIdNumericUpDown.Value),
                TaskNameTextBox.Text,
                DescriptionTextBox.Text,
                radioButton1.Checked ? TaskData.TaskType.Active : TaskData.TaskType.Deactive);

            _data.AddTask(taskData);

            MessageBox.Show("タスク登録に成功", "成功", MessageBoxButtons.OK);
        }

        private bool CheckValid(out string message)
        {
            if (string.IsNullOrEmpty(TaskNameTextBox.Text))
            {
                message = "名前が入力されていません。";
                return false;
            }

            var id = decimal.ToInt32(TaskIdNumericUpDown.Value);
            if (!_data.IsDuplicateId(id, out message))
            {
                return false;
            }

            message = string.Empty;
            return true;
        }
    }
}
```

```cs:TaskDataManager
namespace KT_TaskManage.Data
{
    public class TaskDataManager
    {
        readonly List<TaskData> _taskData = new();
        public void AddTask(TaskData data)
        {
            _taskData.Add(data);
        }

        public int GetTaskCount()
        {
            return _taskData.Count;
        }

        public string GetTaskName(int index)
        {
            return _taskData[index].Name;
        }

        public bool IsDuplicateId(int id, out string message)
        {
            if (_taskData.Any(n => n.Id == id))
            {
                message = "重複IDがあります。";
                return false;
            }

            message = string.Empty;
            return true;
        }
    }
    public class TaskData
    {
        public enum TaskType
        {
            Active,
            Deactive,
            None,
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public TaskType Type { get; set; }
        public TaskData(int id, string name, string description, TaskType type)
        {
            Id = id;
            Name = name;
            Description = description;
            Type = type;
        }
    }
}
```