0

我對編程相當陌生,所以如果我沒有正確描述所有內容,請和我一起裸露。我試圖爲員工創建一個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 = ""; 
     } 
    } 
+0

我建議使用一個按鈕來讀取文本框中的值並將其提交給數據庫(或任何永久性存儲),並且只有在數據正確存儲後,才能清除文本框。 – Steve 2014-08-28 14:08:24

+0

我不確定要了解您的要求,但檢查控件失去焦點時的事件是... [LostFocus](http://msdn.microsoft.com/zh-cn/library/system.windows.forms .control.lostfocus(v = vs.110)的.aspx)。如果您確實使用它,請考慮使用[GotFocus](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.gotfocus(v = vs.110).aspx)而不是Click爲更好的用戶體驗(如果用戶使用標籤來集中你的文本框呃?:p) – Kilazur 2014-08-28 14:10:51

+0

請澄清這一點'第二,我想再次檢查,如果用戶離開文本框並插入任何值的小時它返回到 – djv 2014-08-28 14:14:40

回答

0

如果我理解你的要求,你真正想要的是一個Watermark/Cue banner implementation

但是,由於我可能是monstruosly錯誤,這裏是一個你想要完成的實現。

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"; 
    } 
} 
+0

謝謝!我得到了我需要的東西。我只是不得不將f(!String.IsNullOrEmpty(tb.text))更改爲if(tb.Text ==「」) – 2014-08-28 16:34:19

+0

這看起來很奇怪。基本上,String.IsNullOr [Empty/WhiteSpace]是否已經檢查過;此外,最好使用myString.Equals(「」)而不是==「」。考慮接受我的答案,如果它確實解決了你的問題。 – Kilazur 2014-08-28 17:01:20