无法设置 属性 值 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() 方法完成了工作。顺便说一句,当然不可避免地会闪烁一点。