C# - CheckBoxのサンプル　コードべた書き（Visual Studio不使用）／ClickイベントとCheckedChangedイベントの違い

目次： [C# - Windows Formsでよく使うコントロールたち （Visual Studioなし環境向け） - Qiita](https://qiita.com/kob58im/items/a6cff48ce6bfbcf41c39)

# 画面キャプチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438183/2d8ff417-b0c2-63ae-e56c-e974267cc315.png)



# `Click`イベントと`CheckedChanged`イベントの違い

- `CheckedChanged`イベントは、ユーザー操作だけでなく、プログラムからCheckBoxの`Checked`プロパティを操作した場合もコールされる。
- `Click`イベントは、ユーザー操作からは呼ばれる。「クリック(Click)」という名称だが、スペースキーで`Checked`状態を操作しても呼んでくれる。プログラムからCheckBoxの`Checked`プロパティを操作した場合はコールされない。

## 確認用コード

```csharp:確認用コード

using System;
using System.Drawing;
using System.Windows.Forms;

class CheckBoxSample:Form
{
    CheckBox checkBox;

    CheckBoxSample()
    {
        Text = "CheckBox sample";

        Controls.Add(checkBox = new CheckBox(){
            Location = new Point(10, 10),
            Size = new Size(150, 25),
            Text = "sample",
        });


        // 用途に合わせて、どちらか一方を使うとよいかと思います。
        checkBox.CheckedChanged += CheckBoxCheckedChanged;
        checkBox.Click += CheckBoxClick;


        Button button;
        Controls.Add(button = new Button(){
            Location = new Point(10, 50),
            Size = new Size(150, 25),
            Text = "test",
        });
        button.Click += (s,e)=>{checkBox.Checked = !checkBox.Checked;};
    }


    // CheckedChangedイベントは、
    // ユーザー操作だけでなく、
    // プログラムからCheckBoxのCheckedプロパティを操作した場合もコールされる。
    void CheckBoxCheckedChanged(object sender, EventArgs e)
    {
        // window title
        if ( checkBox.Checked ) {
            Text = "Checked";
        }
        else {
            Text = "Not checked";
        }
    }
    

    // Clickイベントは、
    // ユーザー操作からは呼ばれる。
    // （「クリック(Click)」という名称だが、スペースキーでCheck状態を操作しても呼んでくれる。）
    // プログラムからCheckBoxのCheckedプロパティを操作した場合はコールされない。
    void CheckBoxClick(object sender, EventArgs e)
    {
        Console.WriteLine("clicked");
    }


    [STAThread]
    static void Main()
    {
        Application.Run(new CheckBoxSample());
    }
}
```

# テンプレ

```csharp:テンプレ

using System;
using System.Drawing;
using System.Windows.Forms;

class CheckBoxSample:Form
{
    CheckBox checkBox;

    CheckBoxSample()
    {
        Text = "CheckBox sample";

        Controls.Add(checkBox = new CheckBox(){
            Location = new Point(10, 10),
            Size = new Size(150, 25),
            Text = "sample",
        });

        // 用途に合わせて、どちらか一方を使うとよいかと思います。
        //checkBox.Click += CheckBoxClick;
        checkBox.CheckedChanged += CheckBoxCheckedChanged;
    }

    //void CheckBoxClick(object sender, EventArgs e)
    void CheckBoxCheckedChanged(object sender, EventArgs e)
    {
        // window title
        if ( checkBox.Checked ) {
            Text = "Checked";
        }
        else {
            Text = "Not checked";
        }
    }

    [STAThread]
    static void Main()
    {
        Application.Run(new CheckBoxSample());
    }
}
```

# 参考サイト

 - [CheckBox Class (System.Windows.Forms) | Microsoft Docs](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.checkbox?view=netframework-4.8)
 - [CheckBox - C#プチリファレンス](https://csharp-ref.com/form_checkbox.html)