我创建了一个继承面板的类,然后用Textbox
填充面板。然后,我尝试使用以下代码在Textbox
中添加水印/占位符:
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
Dim sTxt As String = Me.Text
sTxt = IIf(sTxt.Length = 0, txt.Text, sTxt)
If m.Msg = &HF Then
If Not Me.Focused AndAlso String.IsNullOrEmpty(sTxt) AndAlso Not String.IsNullOrEmpty(Me.WaterMark) Then
Using g = Me.CreateGraphics()
TextRenderer.DrawText(g, Me.WaterMark, Me.Font, Me.ClientRectangle, Color.Red, Me.BackColor, TextFormatFlags.Top Or TextFormatFlags.Left)
End Using
End If
MyBase.Update()
End If
End Sub
我仅使用Textbox
尝试了该代码,但WaterMark
确实出现了,但是当我尝试在自定义文本中使用它时,WaterMark
永远不会出现。我认为问题是因为WndProc
事件从未触发过,因为我在面板内添加了Textbox
。那么如何覆盖Panel_WndProc
到Txt_WndProc
?