如何将属性添加到组的窗体中,并在“属性”窗口中显示并可编辑
本文关键字:属性 窗口 显示 编辑 并在 添加 窗体 | 更新日期: 2023-09-27 18:24:53
我有这个类:
public class MyProps
{
public MyProps()
{
}
protected string myVar;
public string MyProperty
{
get { return myVar; }
set { myVar = value; }
}
protected int myOtherVar;
public int MyOtherProperty
{
get { return myOtherVar; }
set { myOtherVar = value; }
}
}
我想添加到我的Form中,所以当我从它继承时,我将能够填充MyPropsX属性中的属性。
我的表单中有以下代码:
protected MyProps propsX = new MyProps();
[TypeConverter(typeof(ExpandableObjectConverter))]
public MyProps MyPropsX
{
get
{
return propsX;
}
set
{
propsX = value;
}
}
现在,属性MyProperty和MyOtherProperty很好地显示在properties窗口中,我可以直接在那里设置它们的值。
但是,当我关闭窗体并再次打开它时,我所做的所有更改都将丢失,属性将重置为显示零和空字符串。
我错过了什么?我应该从某个特殊类或interbase继承MyProps类吗?或者一些特殊的属性?
这对于一个评论和您的解决方案来说有点太多了,所以我用另一个评论来回答您的评论:
对于does not happen when I put properties directly on a form
,你的意思是,你正在使用设计器来设置表单的一些属性。这些属性将被写入MyForm.designer.cs文件。当您进入类的代码时,您会在构造函数中发现一个方法InitializeComponent()
。将光标设置在上面,然后按F12。在这里你可以看到设计师在所有属性中写了什么。你应该尊重上面提到的方法的注释,不要开始用代码编辑器修改代码,除非你真的了解设计师将如何以及何时在这里阅读和编写代码(如果需要,这是我可以解释的另一章)。否则,在代码更改后尝试使用设计器打开表单将导致错误消息或代码丢失。
如果您还想设置一些默认值,那么应该返回构造函数,在InitializeComponent()
函数下面添加所需的初始化代码,一切都应该按预期进行。
更新
正如您在评论中所写的,您已经知道Designer是如何与*.Designer.cs文件交互的。所以我真的不理解你的具体问题,但也许其中一篇文章可以让你更深入地了解微软是如何编写组件的:
- 使用Visual Studio.NET属性浏览器使您的组件真正RAD
- Visual Studio中的组件
这很正常,因为每次关闭表单并再次打开它时,都会有一个来自表单MyPropsX的新实例,所以最好的方法是将属性保存在任何类型的数据库(sql、access、textfiles…)中