占位符对齐 - 获取CallbackOnCollectedDelegate错误

时间:2013-04-07 10:10:45

标签: vb.net delegates callback garbage-collection

在我在VB.NET中创建的一个Windows窗体中,对于其中一个文本框,我使用的是一个模拟文本框中占位符的代码,即默认情况下在文本中的文本框,当用户点击文本框时,文本消失,以允许用户写他的文本。如果用户没有写任何内容并点击文本框,则文本会重新显示。

enter image description here

如您所见,占位符与右侧对齐。但是,根据我的代码,当用户单击文本框(文本框已获得焦点)时,要输入的文本现在应该与左侧对齐。这是我的代码:

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中。

enter image description here

在Visual Basic 2010中,我遇到CallbackOnCollectedDelegate错误。

enter image description here

我相信两个版本都会出现同样的错误。

任何人都可以帮助我吗?如果是这样,请包含有关什么是委托,什么是回调以及什么是垃圾收集器的信息。

代码已修改,问题已删除,但另一个问题已解决。

现在,在处理文本框的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

我现在遇到的问题是,在文本框上获得焦点时,文本未对齐到左侧,并且没有获得“常规”字体样式。

enter image description here

但是,如果我在TextBox_ProjectName.TextAlign = HorizontalAlignment.Right子例程中对LostFocus代码进行评论,则文本成功对齐到左边并成为'常规'样式,但随后在文本框中失去焦点并且用户没有输入任何东西,占位符现在显然与左边对齐,这使它变得丑陋,因为之前它与右边对齐。

enter image description here

enter image description here

enter image description here

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

我知道我在这里发布了一个很长的问题。抱歉。但是,如果只讨论问题的第一部分,我将很高兴。第二部分可以视为补充。

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

0 个答案:

没有答案