大家好,我试图在Textboxes上使用Labels创建一个鬼文本.我正在使用VB.Net2005.我用这段代码完成了这个: Public Class frmDataEntry Private Sub PhantomTextLastName() If txtLastName.Text = "" Then lblLastName.Visible
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
有没有办法减少这个代码,所以当我尝试添加另一个文本框时,我将永远不必重新键入一堆代码.我有使用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
然后,使用此自定义控件而不仅仅是TextBox.您需要做的就是为您添加的每个新控件设置GhostText属性,而不是重新重新使用相同的逻辑.