需要帮助清除和恢复点击的文本框

问题描述 投票:0回答:1

我正在尝试为员工创建一个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 = "";
       }
     }
c# visual-studio visual-studio-2012 textbox windows-forms-designer
1个回答
0
投票

如果我理解你的要求,你真正想要的是一个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";
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.