我正在为我的图书馆制作自定义表单
Public Class MycustomForm : Inherits Form
Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Private _CloseBox As Boolean = True
Public Sub New()
MyBase.New()
End Sub
<Category("WindowStyle")> _
<DefaultValue(True)> _
<Description("This property enables or disables the close button")> _
Public Property CloseBox As Boolean
Get
Return _CloseBox
End Get
Set(value As Boolean)
If value <> _CloseBox Then
value = _CloseBox
Me.RecreateHandle()
End If
End Set
End Property
Protected Overrides ReadOnly Property CreateParams As CreateParams
Get
Dim CustomParams As CreateParams = MyBase.CreateParams
If Not _CloseBox Then
CustomParams.ClassStyle = CustomParams.ClassStyle Or CP_NOCLOSE_BUTTON
End If
Return CustomParams
End Get
End Property
End Class
我创建了一个属性,为开发人员提供了禁用关闭按钮的可能性
当我在设计师中测试我的表单时,我更改了MyForm.Designer
:
Partial Class MyForm
Inherits MycustomForm
之后,该属性已添加,当我尝试将属性更改为False
时,我无法更改它,因为该属性未更改
我做错了什么?
答案 0 :(得分:1)
请注意您的属性仅用于CreateParams属性getter。当窗口创建时,此getter仅在非常特定的时间使用。因此,如果您希望您的属性产生影响,则需要重新创建窗口。
这听起来很难,但不是。 Winforms通常需要动态地重新创建窗口,有几个现有属性具有相同的皱纹。像ShowInTaskbar,Opacity,FormBorderStyle等。让你的二传手看起来像这样:
Set(value As Boolean)
If value <> _CloseBox Then
_CloseBox = value
If Me.IsHandleCreated Then RecreateHandle()
End If
End Set
RecreateHandle()方法完成工作。它当然不可避免地闪烁了一点点。
答案 1 :(得分:0)
你犯了一个简单的错误。
将value = _CloseBox
更改为_CloseBox = value