0

我正在使用 C# .net 4.0 VS 2010。

我正在尝试制作一个模拟 facebook 行为的文本框,特别是在文本框中有“+ Enter Message”并且颜色为灰色。我还交换了 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 = "";
        }
    }

仅供参考,这是最终的工作代码-------------

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

    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 = "";
        }
    }

    private void textBox1_Click(object sender, EventArgs e)
    {
        if (this.textBox1.Text.Trim() == "+Enter Message")
        {
            this.textBox1.ForeColor = System.Drawing.ColorTranslator.FromHtml("#000000");
            this.textBox1.Text = "";
        }
    }
4

2 回答 2

1

您可以在初始化后订阅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 消息”,这样在 TextChanged 事件订阅之前完成初始化。

于 2013-07-16T06:38:12.083 回答
1

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

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

然后在 form_load 中更改文本后再次添加或仅添加事件

this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
于 2013-07-16T06:42:09.097 回答