首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计器未保存的基类的属性值

设计器未保存的基类的属性值
EN

Stack Overflow用户
提问于 2014-10-12 09:49:42
回答 1查看 1.9K关注 0票数 3

我在2013中向我的WinForms项目中添加了一个窗体,我希望将该表单用作其他窗体的基本窗体。假设我在此表单上放置了一个按钮,并且我希望有一个使该按钮可见或不可见的属性。

代码语言:javascript
复制
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添加到设计器文件中时,它会工作并保持在那里,因此我想问题在于设计器没有将行添加到设计器文件中。

在更改设计器中的属性值后,这是派生窗体的设计器文件:

代码语言:javascript
复制
<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的答案都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-12 12:07:13

First,您似乎误解了DesignerSerializationVisibility属性的DesignerSerializationVisibility.Content值。

您需要使用DesignerSerializationVisibility.Visible值来保存属性值。请参阅以下相关内容:Properties won't get serialized into the .designer.cs file

然后是,您不能直接引用自定义属性中的Button.Visible属性。每次打开继承的True时,按钮的可见性状态都将重置为其默认值( form )。因此,您的自定义属性总是在加载表单时显示True

你需要

  • 将状态存储在变量中
  • InitializeComponent方法之后以及当属性的值更改时,调整按钮的可见性。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26323837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档