いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

TextBoxでのイベント発生順序 (TextBox, Enter, GotFocus, TextChanged, Leave, Validating, Validated, LostFocus)


いつもValidate系のイベントがどのタイミングで発生するのかを忘れるのでメモメモ。


以下、サンプルです。

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Text;

namespace Gsf.Demo{
    
    public class DemoForm : Form{

        TextBox txt1;
        Button  btn1;

        StringBuilder _sb = new StringBuilder();

        public DemoForm(){
            InitializeComponent();
        }

        protected void InitializeComponent(){

            SuspendLayout();

            Text   = "Event Research Sample.";
            Width  = 250;
            Height = 100;

            txt1 = new TextBox{
                Width    = 100,
                Location = new Point(10, 10)
            };

            btn1 = new Button{
                Width    = 100,
                Text     = "Show Event Log",
                Location = new Point(120, 10)
            };

            txt1.TextChanged += (s, e) => {
                _sb.AppendLine("TextChanged Event.");
            };

            txt1.Validating += (s, e) => {
                _sb.AppendLine("Validating Event.");
            };

            txt1.Validated += (s, e) => {
                _sb.AppendLine("Validated Event.");
            };

            txt1.Enter += (s, e) => {
                _sb.AppendLine("Enter Event.");
            };

            txt1.Leave += (s, e) => {
                _sb.AppendLine("Leave Event.");
            };

            txt1.GotFocus += (s, e) => {
                _sb.AppendLine("GotFocus Event.");
            };

            txt1.LostFocus += (s, e) => {
                _sb.AppendLine("LostFocus Event.");
            };

            btn1.Click += (s, e) => {
                MessageBox.Show(_sb.ToString());
                Console.WriteLine(_sb.ToString());
            };

            Controls.AddRange(new Control[]{
                    txt1,
                    btn1
            });

            ResumeLayout();
        }
    }

    class EntryPoint{

        [STAThread]
        static void Main(){
            Application.EnableVisualStyles();
            Application.Run(new DemoForm());
        }
    }
}


上記サンプルを実行すると、以下の順序で表示されます。

Enter Event
GotFocus Event
TextChanged Event
Leave Event
Validating Event
Validated Event
LostFocus Event


補足:てか、MSDNに書いてあるの忘れてた・・・orz
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.validated.aspx



================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。