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

问题描述:

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

I was wondering how to create a "hint" for two different textboxes in a form?

这是我的代码:

导入 System.Runtime.InteropServices

Form_Load 事件:

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

共享功能:

<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

此代码仅适用于 txtAmount 文本框.知道如何让两个人以一种形式工作吗?

This code is only working for the txtAmount textbox. Any idea how to get two working in one form?

谢谢.

创建一个类:

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

然后在您的主要表单中:

Then in your main form:

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

我认为它有效.谢谢