2011-08-12 74 views
4

在我的應用程序中,我有一個用於輸入用戶名的文本框。如果文本爲空,我想在同一個文本框中以灰色顯示「在此輸入用戶名」。文本框中是否有這樣的屬性?像Firefox瀏覽器,如果URL字段爲空,將顯示「轉到網站」在灰色如何在VB .NET中設置TextBox提示標籤?

感謝

+0

它是WPF還是WinForms? –

+0

可能重複[如何用默認文本填充空文本框?](http://stackoverflow.com/questions/5178247/how-do-i-fill-an-empty-textbox-with-default-text) ,[WinForms中的水印文本框](http://stackoverflow.com/questions/4902565/watermark-textbox-in-winforms/) –

回答

-1

嘗試沿着這一線的東西:

(onkeyup) 
If TextBox.Text = "" Then 
    TextBox.Text = "Enter username here..." 
    TextBox.ForeColor = <your chosen color here> 
Else 
    TextBox.ForeColor = <normal color here> 
End If 
+0

一個糟糕的主意。不處理鼠標點擊(右鍵單擊 - >上下文菜單 - >剪切不應該可用),'Text'將這個佔位符作爲*實際文本*返回(你希望它返回'string.Empty')等等。這有很多缺點。 –

+0

感謝您的反饋。我不打算提供涵蓋所有用例的解決方案,因爲關於如何涵蓋每個邊緣案例的解釋將會太長。我的意圖只是讓皇家朝正確的方向推進,即。每當文本(可能)發生變化時更改元素ForeColor的想法。 –

+0

謝謝,但有沒有這方面的任何財產。我不想按照Dan Abramov編寫的代碼來編寫這個bcz(如果財產不存在,我會在文本框旁邊添加標籤) –

1

假設你的意思的Windows表格,看看this question
基本上,你需要調用一個WinAPI SendMessage函數用於控制EM_SETCUEBANNER的值。

8

我知道這可能是一個古老的線索,但我想我會回答它,以防其他人偶然發現它。

首先聲明以下(您可能需要導入System.Runtime.InteropServices

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _ 
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, <MarshalAs(UnmanagedType.LPWStr)> ByVal lParam As String) As Int32 
End Function 

然後調用以下(根據需要進行更改):

SendMessage(Me.textbox1.Handle, &H1501, 0, "Enter User name here") 
+0

偉大的答案,Grahamvs!這是我一直在尋找的東西。不過,我在試圖在form_load事件的兩個不同文本框中顯示提示時遇到了問題。有小費嗎? – Sev09

+0

@ Sev09你可以發佈你的代碼嗎?嘗試'SendMessage(Me.textbox2.Handle,&H1501,0,「你的第二條消息在這裏)'。我建議創建一個新問題,然後在@Grahamvs中添加評論,以便我可以看到它。我還建議創建一個新的類,繼承自文本框,並在其中添加代碼,因爲它會使重用代碼變得更容易。 – Grahamvs

+0

我會這麼做的。我會在這裏更新鏈接。 – Sev09

1

你也可以繼承TextBox和重寫的WndProc

Public Class TextBoxPlaceHolder 
    Inherits TextBox 
    Private Const WM_PAINT As Int32 = &HF 
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
     MyBase.WndProc(m) 
     If m.Msg = WM_PAINT AndAlso Me.TextLength = 0 Then 
      Using g = Me.CreateGraphics 
       g.DrawString("Enter User name here", Me.Font, Brushes.Gray, 1, 1) 
      End Using 
     End If 
    End Sub 
End Class 
+1

謝謝!這是偉大的,我想多次使用它,所以我創建了這個類的屬性: 私人提示作爲字符串 公共只寫屬性HintText()作爲字符串 集(值作爲字符串) 提示=值 結束設定 End Property 然後我覆蓋上面的硬編碼文本: g.DrawString(提示,Me.Font,Brushes.Gray,1,1) 從調用形式,我設置提示使用: Form1.TextBoxPlaceHolder1.HintText =「輸入所需的名稱」 – cardmagik