我有这样的代码:为什么我不能使用标签保留文本框?
public static void AddDefaultTextFromTag(params TextBox[] textBoxes)
{
foreach (TextBox oTextBox in textBoxes)
{
bool isPasswordChar = oTextBox.UseSystemPasswordChar;
oTextBox.Enter += (sndr, evnt) =>
{
if (((TextBox)sndr).Text == ((TextBox)sndr).Tag.ToString())
{
((TextBox)sndr).Text = "";
((TextBox)sndr).UseSystemPasswordChar = isPasswordChar;
((TextBox)sndr).ForeColor = SystemColors.WindowText;
}
};
oTextBox.Leave += (sndr, evnt) =>
{
if (((TextBox)sndr).Text.Trim().Count() == 0)
{
((TextBox)sndr).UseSystemPasswordChar = false;
((TextBox)sndr).CharacterCasing = CharacterCasing.Normal;
((TextBox)sndr).Text = ((TextBox)sndr).Tag.ToString();
((TextBox)sndr).ForeColor = SystemColors.GrayText;
}
};
if (oTextBox.Text.Trim().Count() == 0)
{
oTextBox.UseSystemPasswordChar = false;
oTextBox.CharacterCasing = CharacterCasing.Normal;
oTextBox.Text = oTextBox.Tag.ToString();
oTextBox.ForeColor = SystemColors.GrayText;
}
}
}
但是当这种方法的参数TextBox.UseSystemPasswordChar
我输入是真实的,它的TextBox.Text
属性为空,则TextBox
不能离开使用键盘上的Tab
按钮,只有MouseClick
可以用来失去那个TextBox
的焦点。
这是怎么发生的?我的代码是在C#中,框架4,构建在VS2010 Pro中,项目在WinForms中。 我使用VS ToolBox中的TextBox。
请帮忙。提前致谢。
只是一个建议:为什么不创建两个方法(Enter和Leave)并将它作为事件处理程序附加到所有文本框,而不是使用每个自定义委托一? (我不认为它们在这种情况下被重用,但我不确定)而不是复制代码,您可以在所有这些代码上运行Leave事件处理程序。 – Joey 2012-02-14 06:40:21
@Joey匿名方法是绝对重用的。在编译期间,每个匿名方法都转换为该类的实例方法,并且该方法用于事件处理程序。所以不要担心:) – 2012-02-14 07:07:17
啊,谢谢MD.Unicorn。然后可以忽略该部分,并使用最后一个减少代码重复的建议;) – Joey 2012-02-14 12:54:50