1

在我在 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,则文本成功地向左对齐并变为“常规”样式,但随后,在文本框失去焦点且用户未输入任何内容时,占位符现在显然已对齐到左边,这使得它很难看,因为以前它是向右对齐的。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

这里有什么问题?为什么没有评论时文本不左对齐?

我知道我在这里发布了一个很长的问题。对不起。但是,如果只解决问题的第一部分,我会很高兴。第二部分可以作为补充。

任何帮助将不胜感激。谢谢你。

4

0 回答 0