为两个不同的文本框(水印)创建文本框"提示"消息

Sev*_*v09 1 vb.net winforms

我想知道如何为表单中的两个不同文本框创建"提示"?

这是我的代码:

Imports System.Runtime.InteropServices

Form_Load事件:

SendMessage(Me.txtAmount.Handle, &H1501, 0, "$X.XX")
SendMessage(Me.txtMemo.Handle, &H1501, 0, "Enter a transaction memo.")
Run Code Online (Sandbox Code Playgroud)

共享功能:

<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
Run Code Online (Sandbox Code Playgroud)

此代码仅适用于txtAmount文本框.知道如何让两个工作在一个表单?

谢谢.

小智 6

创建一个类:

Public Class MultilineTextBoxWaterMark
Inherits TextBox

Private Const WM_PAINT = &HF

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    MyBase.WndProc(m)

    If m.Msg = WM_PAINT Then
        If Text.Length <> 0 Or Me.Focused Then
            Return
        End If
        Using g As Graphics = Me.CreateGraphics, format As New StringFormat()
            format.LineAlignment = StringAlignment.Near

            g.DrawString("Enter a transaction memo.", Me.Font, Brushes.LightGray, Me.ClientRectangle, format)
        End Using
    End If
End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

然后在你的主要形式:

Private MltLnTxtBxWrMrk As New MultilineTextBoxWaterMark

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    MltLnTxtBxWrMrk.Location = New Point(100, 30) 'whatever you want
    MltLnTxtBxWrMrk.Width = 300 'whatever you want
    MltLnTxtBxWrMrk.Height = 100 'whatever you want
    MltLnTxtBxWrMrk.BorderStyle = BorderStyle.Fixed3D 'whatever you want
    MltLnTxtBxWrMrk.Multiline = True

    Me.Controls.Add(MltLnTxtBxWrMrk)
End Sub
Run Code Online (Sandbox Code Playgroud)

我认为它有效.谢谢