6

この回答を読みました。ボタンコントロールからクリックイベントを削除する方法を教えてください。コード (特にその部分) を変更する方法を知りたいGetField("EventClick"...ので、他のコントロールでも同じことができます。たとえば、 のTextChangedイベントを削除したいとしTextBoxます。また、イベント ハンドラーを再アタッチする方法も知りたいです。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Length < 10) return;

        MessageBox.Show("do something");
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Tools.mkTextBoxWithPlaceholder(textBox1, "hi, input here...");
    }
}
class Tools
{
    public static void mkTextBoxWithPlaceholder(TextBox tb, string placeholder)
    {
        tb.Tag = placeholder;
        tb.GotFocus += new EventHandler(tb_GotFocus);
        tb.LostFocus += new EventHandler(tb_LostFocus);
    }

    private static void tb_GotFocus(object sender, EventArgs e)
    {
        TextBox tb = sender as TextBox;
        tb.Clear();
    }
    private static void tb_LostFocus(object sender, EventArgs e)
    {
        TextBox tb = sender as TextBox;

        //TODO Remove the TextChanged event handler here.

        tb.Text = tb.Tag as string;

        //TODO Reattach the TextChanged event handler here.
    }
}

上記のコードでは、textBox1 に placeholder のような機能が追加されます。プレースホルダーをテキスト ボックスに追加する方法を教えてください。それが私が欲しいものです。

4

2 に答える 2