无法设置 属性 值 VB.NET
Unable to set property value VB.NET
我正在为我的图书馆制作自定义表格
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
时,我无法更改它,因为属性没有变化
我做错了什么?
你犯了一个简单的错误。
将value = _CloseBox
改为_CloseBox = value
请注意您的 属性 仅用于 CreateParams 属性 getter。此 getter 仅在非常特定的时间使用,即 创建 时 window。因此,如果您希望 属性 产生影响,则有必要重新创建 window.
这听起来很难,其实不然。 Winforms 通常需要即时重新创建 window,有几个现有的属性具有相同的问题。像 ShowInTaskbar、Opacity、FormBorderStyle 等等。让你的 setter 看起来像这样:
Set(value As Boolean)
If value <> _CloseBox Then
_CloseBox = value
If Me.IsHandleCreated Then RecreateHandle()
End If
End Set
RecreateHandle() 方法完成了工作。顺便说一句,当然不可避免地会闪烁一点。
我正在为我的图书馆制作自定义表格
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
时,我无法更改它,因为属性没有变化
我做错了什么?
你犯了一个简单的错误。
将value = _CloseBox
改为_CloseBox = value
请注意您的 属性 仅用于 CreateParams 属性 getter。此 getter 仅在非常特定的时间使用,即 创建 时 window。因此,如果您希望 属性 产生影响,则有必要重新创建 window.
这听起来很难,其实不然。 Winforms 通常需要即时重新创建 window,有几个现有的属性具有相同的问题。像 ShowInTaskbar、Opacity、FormBorderStyle 等等。让你的 setter 看起来像这样:
Set(value As Boolean)
If value <> _CloseBox Then
_CloseBox = value
If Me.IsHandleCreated Then RecreateHandle()
End If
End Set
RecreateHandle() 方法完成了工作。顺便说一句,当然不可避免地会闪烁一点。