在用户点击控件和/或将自己的文字写入字段之前,文本框显示特定字符串(斜体和不同字体)的效果最简单的方法是什么?例如,查看"搜索" 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,直到我给另一个控件焦点。
那么,这种方法是否是最好的,如果是的话,那么正确的第二个条件是什么而不是重点?
答案 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
。