C#のWinFormsでコンボボックスのイベントを確認する。

C# コンピュータ
C#

コンボボックスで値を選択する場合と入力した場合のイベントを確認してみました。

テストプログラムソース

using System.Diagnostics;

namespace ComboBoxEventTest;
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        var panel = new Panel
        {
            Padding = new Padding(10),
            Dock = DockStyle.Top,
            Height = 64,
        };
        var cmb = new ComboBox
        {
            Dock = DockStyle.Fill,
        };
        var btn = new Button
        {
            Dock = DockStyle.Left,
            Text = "追加",
        };

        cmb.Items.Add(@"C:\");
        cmb.Items.Add(@"D:\");
        cmb.Items.Add(@"E:\");

        cmb.TextChanged += (e, s) => Debug.Print("TextChanged");
        cmb.SelectedIndexChanged  += (e, s) => Debug.Print("SelectedIndexChanged ");
        cmb.SelectedValueChanged  += (e, s) => Debug.Print("SelectedValueChanged ");

        btn.Click += (s, e) =>
        {
            cmb.Text = "hoge";
        };

        panel.Controls.AddRange(new Control[]{cmb, btn});
        
        Controls.AddRange(new Control[]{panel});
    }
}

キーボード入力

TextChanged
TextChanged
TextChanged

abcと3文字入力するとTextChangeイベントも3回発生

コンボボックスで値を選択

TextChanged
SelectedValueChanged 
SelectedIndexChanged

コンボボックスのTextプロパティの値を変更

TextChanged

確認できたこと

コンボボックスの値を3パターンで変更してみましたが、共通して発生したイベントはTextChangeでした。
ただし、キーボード入力の場合1文字ごとに発生していたので、無効な値をバリデーションでは除外する必要がありそうです。

コメント