
大家好,我试图在Textboxes上使用Labels 创建一个鬼文本.我正在使用VB.Net2005.我用这段代码完成了这个:
Public Class frmDataEntry
Private Sub PhantomTextLastName()
If txtLastName.Text = "" Then
lblLastName.Visible = True
Else
lblLastName.Visible = False
End If
End Sub
Private Sub PhantomTextFirstName()
If txtFirstName.Text = "" Then
lblFirstName.Visible = True
Else
lblFirstName.Visible = False
End If
End Sub
Private Sub PhantomTextMiddleInitial()
If txtMiddleInitial.Text = "" Then
lblMiddleInitial.Visible = True
Else
lblMiddleInitial.Visible = False
End If
End Sub
Private Sub txtLastName_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtLastName.Click
lblLastName.Text = "Last Name"
End Sub
Private Sub txtLastName_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtLastName.KeyDown
PhantomTextLastName()
End Sub
Private Sub txtLastName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtLastName.TextChanged
PhantomTextLastName()
End Sub
Private Sub lblLastName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblLastName.Click
txtLastName.Focus()
End Sub
Private Sub txtFirstName_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtFirstName.Click
lblFirstName.Text = "First Name"
End Sub
Private Sub txtFirstName_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtFirstName.KeyDown
PhantomTextFirstName()
End Sub
Private Sub txtFirstName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFirstName.TextChanged
PhantomTextFirstName()
End Sub
Private Sub lblFirstName_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblFirstName.Click
txtFirstName.Focus()
End Sub
Private Sub lblMiddleInitial_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblMiddleInitial.Click
txtMiddleInitial.Focus()
End Sub
Private Sub txtMiddleInitial_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtMiddleInitial.Click
lblMiddleInitial.Text = "Middle I."
End Sub
Private Sub txtMiddleInitial_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtMiddleInitial.KeyDown
PhantomTextMiddleInitial()
End Sub
Private Sub txtMiddleInitial_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtMiddleInitial.TextChanged
PhantomTextMiddleInitial()
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
有没有办法减少这个代码,所以当我尝试添加另一个文本框时,我将永远不必重新键入一堆代码.我有使用Module和Class的基本知识,但我真的不知道如何在这个项目中应用它.我是新手,如果你有任何教程可以帮助我解决这个问题,请给我链接.提前谢谢,上帝保佑.
创建一个usercontrol.usercontrol背后的代码可能是这样的:
Public Class GhostTextbox
Private _ghostText As String
Public Property GhostText As String
Get
Return _ghostText
End Get
Set(ByVal Value As String)
_ghostText = Value
End Set
End Property
Public Property ActualText As String
Get
Return Me.TextBox1.Text
End Get
Set(ByVal Value As String)
Me.TextBox1.Text = Value
End Set
End Property
Private Sub PhantomText()
If TextBox1.Text = "" Then
Label1.Visible = True
Else
Label1.Visible = False
End If
End Sub
Private Sub TextBox1_Click(sender As Object, e As System.EventArgs) Handles TextBox1.Click
Label1.Text = GhostText
End Sub
Private Sub TextBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
PhantomText()
End Sub
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
PhantomText()
End Sub
Private Sub GhostTextbox_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Label1.Text = GhostText
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
然后,使用此自定义控件而不仅仅是a TextBox.您需要做的就是GhostText为您添加的每个新控件设置属性,而不是重新重复相同的逻辑.