【发布时间】:2021-09-13 09:45:34
【问题描述】:
我有一个包含几个文本框的表单。加载表单时,我希望这些文本框显示默认的灰色文本,当用户单击文本框时该文本消失。 我用过这段代码:
private void Form1_Load(object sender, EventArgs e)
{
//textbox1 default text
this.tBox1.Enter += new EventHandler(tBox1_Enter);
this.textbox1.Leave += new EventHandler(tBox1_Leave);
tBox1_SetText();
/*...
same for other textboxes
*/
}
/*textbox1 default text*/
// default greyed out text in tBox1
public void tBox1_SetText()
{
tBox1.Text = "some default text";
tBox1.ForeColor = Color.Gray;
}
// remove default text from tBox1 once cruser is set in
public void tBox1_Enter(object sender, EventArgs e)
{
if (tBox1.ForeColor == Color.Black)
return;
tBox1.Text = "";
tBox1.ForeColor = Color.Black;
}
// sets the default text back to tBox1 once cruser is gone
public void tBox1_Leave(object sender, EventArgs e)
{
if (tBox1.Text.Trim() == "")
tBox1_SetText();
}
/*...
same for other textboxes
*/
因为我有很多文本框,我想将所有这些代码从我的表单移动到一个单独的类(类似于 DefaultText.cs),在该类中创建一个方法(“ShowDefaultText()”)并调用它form_load 中的方法,所以我的代码会更容易理解。 我尝试创建此类,但 C# 中没有#include,并且由于实例,我不能使用静态类/方法。 否则我该怎么做?
【问题讨论】:
-
这就是
#using-directive 的用途 -
你正在处理这个问题 - 创建一个组件来包装你的“占位符”文本并将其放置在你需要的默认文本框的位置
-
@Jamiec 这正是我试图避免的。我不想把它放在我需要的地方,因为我不想在我的 form.cs 中有 100 行,专门用于在文本框中设置一些文本。我想要不同类中的所有功能,并且只在我的表单代码中编写一个简单的行。
-
你错过了我的观点——通过将它作为一个组件,你有 no 行代码重复。使该文本变为灰色和占位符的代码仅存在一次 - 在组件中。
-
@Jamiec 是的,但不幸的是我需要每个文本框来显示不同的文本,所以我必须为每个文本框手动设置它,我想避免所有这些代码行,因为我的代码已经很长而且这些行并不重要。