【问题标题】:Winform - Override textbox to show sample text and clear on click [duplicate]Winform - 覆盖文本框以显示示例文本并在单击时清除 [重复]
【发布时间】:2013-06-18 17:30:47
【问题描述】:

我有一个带有文本字段的 Windows 窗体。我希望文本框显示示例文本,当我单击文本框时,文本被清除。最好的方法是什么?

例如表单显示文本:192.18.130.44,当用户点击该文本框时,文本被清除。

【问题讨论】:

标签: c# winforms textbox


【解决方案1】:

我想你想显示一个文本框的默认Text,如果它只是聚焦而没有任何编辑,默认的Text将在它失去焦点时恢复,如下所示:

string initText = "Love .NET";
bool edited;
//This code line is just for demonstrative purpose, it should be placed such as in the Form constructor
textBox1.Text = initText;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    edited = !char.IsControl(e.KeyChar);
}

private void textBox1_Enter(object sender, EventArgs e)
{
    if(!edited) textBox1.Clear();
}

private void textBox1_Leave(object sender, EventArgs e)
{
    if (!edited) textBox1.Text = initText;
}

如果您想让文本看起来像watermark,您可能需要相应地应用更多FontForeColor,或者如果需要一些自定义Paint。最后是使用第三方文本框,这取决于你。

【讨论】:

  • +1 因为它考虑了用户是否编辑了文本,因为大概当用户编辑文本时,您不希望在单击关闭时将其清除,然后单击返回。
【解决方案2】:

当你加载你的 winforms 时,检查文本框是空还是空。

然后,如果是,则显示您的示例文本,并将布尔值设置为 true(如果文本不为空,则为 false)。

然后,在你的 textBox 上写一个点击事件,如果 boolean 为 true,则清除内容,如果 boolean 为 false,则清除任何内容,以避免清除 textBox,如果他包含您的示例中的其他内容..

【讨论】:

    【解决方案3】:

    使用Enter 事件:

    private void textBox_Enter(Object sender, EventArgs e)
    {
        textBox.Text = null;
    }
    

    不过,除非您希望它始终清晰,否则我也会在其中进行一些验证!

    顺便说一句...CueProvider 的链接看起来也很漂亮,如果你不介意第 3 方的东西的话。

    【讨论】:

      【解决方案4】:

      要使其显示示例文本,请将属性菜单中的 text 属性设置为您想要的,例如192.18.120.44

      为了在点击时更清楚,为点击事件创建一个方法并执行 txtbox1.Text = ""; 您可以通过双击文本框来启动此方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多