1

ライブラリ用のカスタム フォームを作成しています

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変更されないため、変更できません

私は何を間違っていますか?

4

2 に答える 2

1

プロパティが CreateParams プロパティ ゲッターでのみ使用されることに注意してください。このゲッターは、ウィンドウが作成される非常に特定の時間にのみ使用されます。したがって、プロパティに影響を与えたい場合は、ウィンドウを再作成する必要があります。

それは非常に難しいように聞こえますが、そうではありません。Winforms は、その場でウィンドウを再作成する必要があることがよくあります。同じしわのある既存のプロパティがいくつかあります。ShowInTaskbar、Opacity、FormBorderStyle などのように。セッターを次のようにします。

    Set(value As Boolean)
        If value <> _CloseBox Then
            _CloseBox = value
            If Me.IsHandleCreated Then RecreateHandle()
        End If
    End Set

RecreateHandle() メソッドは、ジョブを完了します。もちろん、必然的に少しちらつきます。

于 2015-11-15T19:45:27.127 に答える
0

あなたは単純な間違いを犯しました。

value = _CloseBoxに変更_CloseBox = value

于 2015-11-15T19:40:25.893 に答える