2011-12-04 81 views
1

有沒有一種方法可以在文本框處於焦點時創建消失的淺灰色文本?C#.net WinForms如何使文本框中的文本在文本框處於焦點時消失?

目前,我有文字寫在文本框中,但我選擇文本和手動刪除它(有點討厭...)

我知道我能做些什麼,當我在包裝盒上獲得焦點(使用事件),但是,我不希望它在每次用戶選擇該框時清除文本......而只是第一次。換句話說,我只是希望提示文本消失(不是他們輸入的文本,如果他們在打字後選擇框)...

我也意識到我可以使用類似計數器的東西來保持跟蹤是否是第一次該框被點擊..但是,我正在尋找一個更乾淨的方式來做到這一點.....

+0

添加事件偵聽焦點,然後刪除它的第一次它是基於您的編輯叫 – Cameron

+1

...爲什麼不使用onform加載? –

+0

@湯姆巴斯,是的,我可以做到這一點,我猜。我想我更多地考慮它是​​如何在js中完成的,它是多麼的乾淨。這是一行代碼,它確實如此。關於它的很酷的事情是,當你點擊框(如果你沒有輸入任何東西),它會回到提示文本。我也可以在這裏做到這一點...但似乎應該有一個更清潔的方式。感謝您的迴應:) – BigBug

回答

3

像下面的代碼。 請注意,這不是一個編譯代碼。只是分享這個想法,如果用戶沒有輸入任何文字,你可能會保留默認設置。對於那個句柄丟失焦點並重置爲默認值。

public class FancyTextBox : TextBox{ 

private bool _isDefaultText; 
public FancyTextBox(){ 
    UpdateDefaultSettings(true);   
} 

protected override void OnGotFocus(EventArgs e) 
{ 
    base.OnGotFocus(e); 
    UpdateDefaultSettings(false); 
} 

protected override void OnLostFocus(EventArgs e) 
{ 
    base.OnLostFocus(e); 
    if (String.IsNullOrEmpty(Text)) 
    { 
     //Retain Default Setting. 
     UpdateDefaultSettings(true); 
    } 
} 

private void UpdateDefaultSettings(bool isDefault){ 
    _isDefaultText = isDefault; 
    if(_isDefaultText){ 
     Text = "Please enter"; 
     this.ForeColor= Color.Gray; 
    } 
    else{ 
     Text = ""; 
     ForeColor = Color.Black; 
    } 
}  

}

+0

感謝您的迴應! :) – BigBug

2

一個簡單的答案是

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] 
private static extern IntPtr SendMessage(IntPtr hWnd, uint msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); 

public static void SetHint(TextBox textBox, string hintText) 
{ 
const uint EmSetCueBanner = 0x1501; 
SendMessage(textBox.Handle, EmSetCueBanner, 0, hintText); 
} 
相關問題