我正在尝试为员工创建一个TimeCard应用程序,以便能够通过应用程序跟踪他们的工作时间,而不必手动记下他们的工作时间。我有相当数量的文本框需要检查。
首先,我想检查是否单击了文本框,它将清除该文本框中当前的值。
其次,我想再次检查文本框,如果用户单击文本框并且没有在文本框中插入任何值(小时)(空白文本框),它将自动将文本返回到0(小时)。
我正在使用'MouseClick'属性来分配所有这些文本框。模式代码的第一部分正常工作。当用户单击该框时,它会清除之前的0文本,但我无法弄清楚如何返回该0值。单击文本框后,它会清除文本框并将其留空。我已经看到了您可以一次执行此操作的方法,但我正在尝试学习如何有效编码。任何有关这种情况的指导和帮助将不胜感激。谢谢。
工具:C#/ Visual Studio 2012 / Microsoft SQL 2012
private void MainForm_Load(object sender, EventArgs e)
{
foreach (Control control1 in this.Controls)
{
if (control1 is TextBox)
{
control1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.AllTextBoxes_Click);
}
}
}
//Mouse Click Clear
private void AllTextBoxes_Click(object sender, MouseEventArgs e)
{
if ((sender is TextBox))
{
((TextBox)(sender)).Text = "";
}
}
如果我理解你的要求,你真正想要的是一个Watermark/Cue banner implementation。
但是因为我可能是一个错误的错误,所以这是你想要实现的目标的实现。
private void MainForm_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
c.GotFocus += deleteContent_GotFocus; // No need for more than that ;)
c.LostFocus += restoreContent_LostFocus;
}
}
}
private void deleteContent_GotFocus(object sender, EventArgs e)
{
if ((sender is TextBox))
{
// Using "as" instead of parenthesis cast is good practice
(sender as TextBox).Text = String.Empty; // hey, use Microsoft's heavily verbosy stuff already! :o
}
}
private void restoreContent_LostFocus(object sender, EventArgs e)
{
if ((sender is TextBox))
{
TextBox tb = sender as TextBox;
if (!String.IsNullOrEmpty(tb.text)) // or String.IsNullOrWhiteSpace
tb.Text = "0";
}
}