如何在EditControls中显示默认文本?

时间:2012-06-28 17:00:45

标签: c# winforms devexpress

在用户点击控件和/或将自己的文字写入字段之前,文本框显示特定字符​​串(斜体和不同字体)的效果最简单的方法是什么?例如,查看"搜索" SO右上方的框。

我尝试过使用Paint事件:

    private void textEdit1_Paint(object sender, PaintEventArgs e)
    {
        if (textEdit1.Text.Length == 0 && !textEdit1.Focused)
        {
            textEdit1.Font = new Font(textEdit1.Font, FontStyle.Italic);
            textEdit1.Text = "123";

        }
        else
        {
            textEdit1.Font = new Font(textEdit1.Font, FontStyle.Regular);
            textEdit1.Text = string.Empty;
        }
    }

然而,这不起作用。默认情况下,它不显示任何文本,如果我单击它,我似乎得到一个无限循环将文本设置为" 123"和string.empty,直到我给另一个控件焦点。

那么,这种方法是否是最好的,如果是的话,那么正确的第二个条件是什么而不是重点?

3 个答案:

答案 0 :(得分:1)

尝试TextEdit.Properties.NullValuePrompt属性。当编辑器没有焦点时,此属性提供显示为灰色的文本,并且其编辑值未设置为有效值。

答案 1 :(得分:0)

首先,您不应该使用paint事件,如果要通过修改text属性来执行此操作,则应使用FocusChanged事件。但是,最简单的方法不是修改text属性,而是在顶部绘制一个字符串,如下所示:

private void textEdit1_Paint(object sender, PaintEventArgs e)
{
    if (textEdit1.Text.Length == 0 && !textEdit1.Focused)
    {
        Font some_font = new Font(...parameters go here...);
        Brush some_brush = Brushes.Gray; // Or whatever color you want
        PointF some_location = new PointF(5,5); // Where to write the string
        e.Graphics.WriteString("some text", some_font, some_brush, some_location);
    }
}

因此,如果没有文本,并且文本框未聚焦,则绘制此字符串。 WriteString函数有很多重载,所以你可以选择你想要的那个。

答案 2 :(得分:0)

您可以使用Enter事件。例如,将Text属性设置为“搜索”。像其他报告的那样使用您的字体然后捕获Enter事件并将Text属性设置为string.empty

textedit1.Text = "search";
private void textEdit1_Enter(object sender, EnterEventArgs e)
{
  textedit1.text = string.empty;
}

但我认为最佳做法是NullValuePrompt