gpt4 book ai didi

c# - 设计者未保存基类的属性值

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:42 25 4
gpt4 key购买 nike

我在 Visual Studio Express 2013 中向我的 WinForms 项目添加了一个表单,我想将其用作其他表单的基本表单。假设我在这个表单上放了一个按钮,我想要一个属性让这个按钮可见或不可见。

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 的答案,无论您最喜欢什么。

最佳答案

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

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

那么您不能直接引用自定义属性中的 Button.Visible 属性。每次打开继承的 form 时,按钮的可见性状态将重置为其默认值 (True)。因此,当加载表单时,您的自定义属性将始终显示 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

关于c# - 设计者未保存基类的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26323837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com