Значение свойства базового класса не сохранено дизайнером
Я добавил форму в свой проект WinForms в Visual Studio Express 2013, которую я хочу использовать в качестве базовой формы для других форм. Скажем, я поместил кнопку в этой форме и хочу иметь свойство, которое делает эту кнопку видимой или невидимой.
Imports System.ComponentModel
Public Class MyForm
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
Public Property ButtonVisible As Boolean
Get
Return Button1.Visible
End Get
Set(value As Boolean)
Button1.Visible = value
End Set
End Property
End Class
Конструктор этого файла не был изменен. Я просто добавил кнопку в новую форму.
Когда я сейчас создаю новую форму, которая наследует этот класс, я могу изменить значение этого свойства, и во время разработки кнопка действительно становится видимой или невидимой. Однако когда я компилирую проект, свойство сбрасывается обратно к значению по умолчанию. Когда я проверяю файл конструктора производной формы, я вижу, что измененное значение свойства не добавляется к нему и поэтому исчезает в воздухе. Когда я добавлю ButtonVisible = False
вручную в файл конструктора он работает и остается там, так что, я думаю, проблема заключается в том, что конструктор не добавляет строку в файл конструктора.
Это файл конструктора производной формы после того, как я изменил значение свойства в конструкторе:
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form2
Inherits MyForm
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Wird vom Windows Form-Designer benötigt.
Private components As System.ComponentModel.IContainer
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.SuspendLayout()
'
'Form2
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(284, 261)
Me.Name = "Form2"
Me.Text = "Form2"
Me.ResumeLayout(False)
End Sub
End Class
Как видно из приведенного выше кода, я уже пытался решить эту проблему, проверяя различные значения для DesignerSerializationVisible
, но они, кажется, не имеют никакого эффекта.
Есть что-то, что я упустил? Как мне добавить свойства, которые изменяют элементы управления в базовом базовом классе?
Ответы на C# или VB.NET очень ценятся, что бы вы ни хотели.
1 ответ
Во-первых, кажется, вы неправильно поняли DesignerSerializationVisibility.Content
ценность DesignerSerializationVisibility
приписывать.
Вам нужно использовать DesignerSerializationVisibility.Visible
значение, чтобы сохранить значение свойства. Смотрите этот шаг: свойства не будут сериализованы в файл.designer.cs
Тогда вы не можете обратиться непосредственно к Button.Visible
собственность в вашей таможенной собственности. Состояние видимости кнопки будет сброшено до значения по умолчанию (True
) каждый раз открываешь унаследованное form
, Так что ваше пользовательское свойство всегда будет отображаться True
когда форма будет загружена.
Вам нужно
- сохранить состояние в переменной
- настроить видимость кнопки после
InitializeComponent
метод и когда значение вашей собственности меняется.
Public Class MyForm
Public Sub New()
InitializeComponent()
Me.Button1.Visible = _buttonVisibility
End Sub
Private _buttonVisibility As Boolean = True
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>
Public Property ButtonVisible As Boolean
Get
Return _buttonVisibility
End Get
Set(value As Boolean)
_buttonVisibility = value
Button1.Visible = value
End Set
End Property
End Class