C# 如何在C中区分textbox1_TextChange事件上的用户触发和程序触发#

C# 如何在C中区分textbox1_TextChange事件上的用户触发和程序触发#,c#,C#,我使用的是C#net 4.0 VS 2010 我正在尝试制作一个模拟facebook行为的文本框,特别是文本框上有“+输入消息”,并且颜色为灰色。我还交换了tabindex,这样默认情况下文本框不会被选中(破坏了错觉) 据推测,当用户单击文本框时,textbox.text消失,然后前景色恢复为黑色 发生的情况是,它检测到我在Form_Load上加载的程序更改,并在事件显示之前运行该事件 如何区分textbox1_TextChange事件中的用户触发和程序触发 这是我的密码: public

我使用的是C#net 4.0 VS 2010

我正在尝试制作一个模拟facebook行为的文本框,特别是文本框上有“+输入消息”,并且颜色为灰色。我还交换了tabindex,这样默认情况下文本框不会被选中(破坏了错觉)

据推测,当用户单击文本框时,textbox.text消失,然后前景色恢复为黑色

发生的情况是,它检测到我在Form_Load上加载的程序更改,并在事件显示之前运行该事件

如何区分textbox1_TextChange事件中的用户触发和程序触发

这是我的密码:

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {           
        //facebook illusion
        this.textBox1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#CCCCCC");
        this.textBox1.Text = "+Enter Message";

    }

    //when the user clicks on the textbox
    private void textBox1_TextChanged(object sender, EventArgs e)
    {           
        if (this.textBox1.Text.Trim() == "+Enter Message")
        {
            this.textBox1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#000000");
            this.textBox1.Text = "";
        }
    }
仅供参考,这是最终工作代码-------------


您可以在初始化后订阅
TextChanged
事件,例如:

private void Form1_Load(object sender, EventArgs e)
{           
    //facebook illusion
    this.textBox1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#CCCCCC");
    this.textBox1.Text = "+Enter Message";
    this.textBox1.TextChanged += textBox1_TextChanged;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{      
    this.textBox1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#000000");
    this.textBox1.Text = "";        
}

并将其从设计器中删除。或者,您可以直接在设计器中设置
ForeColor
Text
“+Enter message”,这样,在TextChanged事件订阅之前完成初始化。

您可以通过先移除句柄来抑制事件

this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);
然后再添加一次,或者在文本在form_load中发生更改后仅添加事件

this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);

它仍然会产生同样的问题,你尝试了哪种情况?你是否像我建议的那样从设计师那里退订了TextChanged事件?我不知道退订是什么意思。C中的新功能#转到设计器(在VisualStudio中可以看到表单),选择文本框;右边应该有一个“财产”面板。在面板顶部,您应该有一个“lightning”(闪电)按钮,将您带到文本框的“events”(事件)部分,您应该按下此按钮并搜索文本更改,然后删除文本框1\u TextChanged(文本更改)。
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);