控制在设计师中消失

时间:2013-11-22 01:30:45

标签: vb.net winforms windows-forms-designer

考虑使用VS2010创建的空WinForms应用程序。

它有一个自定义TextBox类,代码如下:

Public Class DummyTextBox : Inherits TextBox
  Private Const FONT_SIZE As Single = 14.25!
  Private Const FONT_FAMILY As String = "Microsoft Sans Serif"

  Private Sub Me_ParentChanged(sender As Object,
                               e As System.EventArgs) Handles Me.ParentChanged
    'this one does not work, it causes designer
    'to lose its controls once in a while
    Me.Font = New Font(Me.Parent.Font.FontFamily, FONT_SIZE)
    'if I use a constant value instead, like below, it works fine
    'Me.Font = New Font(FONT_FAMILY, FONT_SIZE) 
  End Sub
End Class

所以基本上是一个TextBox,字体大小增加,与父窗体相同。

发生的事情是,在放入表单然后构建之后,控件有时会从设计者视图中消失。如果您运行该项目,它通常显示正常。关闭/重新打开一个表格,它又在那里。

然而,有时控制将完全消失(我无法在100%的时间内重现),因此您必须再次添加它并设置属性。如果一次放置多个控件,通常只有一个控件会像那样消失。在窗体上移动后,控件更容易消失。

发生了什么事?

1 个答案:

答案 0 :(得分:1)

根据我的研究,Me.Parent有时可能在NothingParentChanged,因此该行会抛出异常,该异常永远不会显示给用户(仅在设计时发生) 。在它周围放置Try/Catch有助于验证这一事实。它看起来像 Windows窗体设计器喜欢分离控件并自行决定将它们附加回来。

要解决此问题,需要验证是否存在父级,然后才设置Font

所以改变这个:

Me.Font = New Font(Me.Parent.Font.FontFamily, FONT_SIZE)

对此:

Dim parent As Control = Me.Parent
If parent Is Nothing Then Return
Me.Font = New Font(parent.Font.FontFamily, FONT_SIZE)

使问题消失,不会以任何方式影响运行时。