如何将属性添加到组的窗体中,并在“属性”窗口中显示并可编辑

本文关键字:属性 窗口 显示 编辑 并在 添加 窗体 | 更新日期: 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…)中