在我在VB.NET中创建的一个Windows窗体中,对于其中一个文本框,我使用的是一个模拟文本框中占位符的代码,即默认情况下在文本中的文本框,当用户点击文本框时,文本消失,以允许用户写他的文本。如果用户没有写任何内容并点击文本框,则文本会重新显示。
如您所见,占位符与右侧对齐。但是,根据我的代码,当用户单击文本框(文本框已获得焦点)时,要输入的文本现在应该与左侧对齐。这是我的代码:
Private Sub TextBox_ProjectName_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox_ProjectName.GotFocus
If TextBox_ProjectName.Text = "(required)" Then
TextBox_ProjectName.Text = ""
End If
TextBox_ProjectName.ForeColor = Color.Black
TextBox_ProjectName.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular)
TextBox_ProjectName.TextAlign = HorizontalAlignment.Left
End Sub
当文本框失去焦点(用户点击文本框外)时,如果用户未在文本框中输入任何内容,则占位符会重新显示。
代码:
Private Sub TextBox_ProjectName_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox_ProjectName.LostFocus
If TextBox_ProjectName.Text = "" Then
TextBox_ProjectName.Text = "(required)"
TextBox_ProjectName.ForeColor = Color.Gray
TextBox_ProjectName.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Italic)
TextBox_ProjectName.TextAlign = HorizontalAlignment.Right
End If
End Sub
但是,我在TextBox_ProjectName.TextAlign = HorizontalAlignment.Right
代码上遇到以下错误。这是在Visual Basic 2008中。
在Visual Basic 2010中,我遇到CallbackOnCollectedDelegate错误。
我相信两个版本都会出现同样的错误。
任何人都可以帮助我吗?如果是这样,请包含有关什么是委托,什么是回调以及什么是垃圾收集器的信息。
现在,在处理文本框的GotFocus的子例程中,我尝试将If
语句之外的代码放在里面,如下所示:
Private Sub TextBox_ProjectName_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox_ProjectName.GotFocus
If TextBox_ProjectName.Text = "(required)" Then
TextBox_ProjectName.Text = ""
TextBox_ProjectName.ForeColor = Color.Black
TextBox_ProjectName.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular)
TextBox_ProjectName.TextAlign = HorizontalAlignment.Left
End If
End Sub
处理文本框的LostFocus的子程序保持不变。
Private Sub TextBox_ProjectName_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox_ProjectName.LostFocus
If TextBox_ProjectName.Text = "" Then
TextBox_ProjectName.Text = "(required)"
TextBox_ProjectName.ForeColor = Color.Gray
TextBox_ProjectName.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Italic)
TextBox_ProjectName.TextAlign = HorizontalAlignment.Right
End If
End Sub
我现在遇到的问题是,在文本框上获得焦点时,文本未对齐到左侧,并且没有获得“常规”字体样式。
但是,如果我在TextBox_ProjectName.TextAlign = HorizontalAlignment.Right
子例程中对LostFocus
代码进行评论,则文本成功对齐到左边并成为'常规'样式,但随后在文本框中失去焦点并且用户没有输入任何东西,占位符现在显然与左边对齐,这使它变得丑陋,因为之前它与右边对齐。
这里有什么问题?当没有评论时,为什么文本没有左对齐?
我知道我在这里发布了一个很长的问题。抱歉。但是,如果只讨论问题的第一部分,我将很高兴。第二部分可以视为补充。
任何帮助将不胜感激。谢谢。