none
如何添加自定义控件的List<属性>? RRS feed

  • 问题

  • 我需要在自定义控件里添加一个属性,这个属性是一个List<BoolTag>,BoolTag如下

        [Serializable]
        public struct BoolTag
        {
            public string Address { get; set; }
            public string Text { get; set; }
            public Image Img { get; set; }
        }

    然后我在,自定义控件里添加如下属性

            List<BoolTag> _Address = new List<BoolTag>();
            [Category("_UserSetting")]
            public List<BoolTag> Address
            {
                get => _Address;
                set
                {
                    if (value != null)
                    {
                        _Address = value;
                    }                
                }
            }

    然后现在有两个问题

    1,编译的时候,经常会出错,不是每次都会,但是运行的时候没问题。得退出vs才能解决。

    2,Img属性在编译后会丢失,变成空白,如图

    请问该如何解决这个问题?是哪里错了?

    2020年10月23日 7:42

全部回复

  • 你好,冬日厦语,

    根据我的测试,我并没有发现你说的这两个问题。

    首先你的编译报错看上去是因为有相同名字的类型和示例产生了冲突,我建议你检查下,如果有的话,要改掉其中的一个名字防止冲突。

    其次,我想问你图片是如何导入到属性中去的,如果是本地导入,应当不会丢失然后变成空白。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年10月26日 7:49
    版主
  • 您好,谢谢答复!我做了一个简单的解决方案,您可以试一下。当我重新编译控件项目<WindowsFormsControlLibrary1>的时候就会出错,但是运行又没有问题.似乎是在设计状态的时候读取资源文件的时候出错。

    下面是onedrive的地址

    https://1drv.ms/u/s!ApHMVc3ltawhgrgFVDLxWwhqVGawIQ

    或者百度网盘

    链接: https://pan.baidu.com/s/1A2_RuZdjR41WN83GOUvnKQ 提取码: dp8e 



    2020年10月26日 15:33
  • 您好,跟名字应该没关系。我做了个简单的例子,麻烦您帮忙看看
    2020年10月26日 15:36
  • Hi 冬日厦语,

    经过我的测试,我重现了你的问题,你可以参照下面的方法来解决这个问题。

    首先,将class1.cs文件删除。

    其次,将结构写到usercontrol类中去,像这样:

    namespace WindowsFormsControlLibrary1
    {
        public partial class UserControl1: UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }
    
            List<BoolTag> _Address = new List<BoolTag>();
            [Category("_UserSetting")]
            public List<BoolTag> Address
            {
                get => _Address;
                set
                {
                    if (value != null)
                    {
                        _Address = value;
                    }
                }
            }
        }
    
        [Serializable]
        public struct BoolTag
        {
            public string Address { get; set; }
            public string Text { get; set; }
            public Image Img { get; set; }
        }
    }

    最后编译下,错误就会消失了。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年10月27日 7:03
    版主
  • 你好,谢谢您的答复,我尝试了问题依旧。

    但是将整个vs关闭重新打开是可以的。但我不能编译一次就重启vs啊

    2020年10月27日 15:16
  • Hi 冬日厦语,

    经过我的测试,我重现了你的问题,你可以参照下面的方法来解决这个问题。

    首先,将class1.cs文件删除。

    其次,将结构写到usercontrol类中去,像这样:

    namespace WindowsFormsControlLibrary1
    {
        public partial class UserControl1: UserControl
        {
            public UserControl1()
            {
                InitializeComponent();
            }
    
            List<BoolTag> _Address = new List<BoolTag>();
            [Category("_UserSetting")]
            public List<BoolTag> Address
            {
                get => _Address;
                set
                {
                    if (value != null)
                    {
                        _Address = value;
                    }
                }
            }
        }
    
        [Serializable]
        public struct BoolTag
        {
            public string Address { get; set; }
            public string Text { get; set; }
            public Image Img { get; set; }
        }
    }

    最后编译下,错误就会消失了。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    您好,我试了问题依旧,是我哪里出错了吗
    2020年10月28日 7:27
  • Hi 冬日厦语,

    感谢您的反馈。

    根据我的测试,你可以尝试下面的步骤来解决这个问题。

    首先,定义BoolTag为类。

    [Serializable]
        public class BoolTag
        {
            public string Address { get; set; }
            public string Text { get; set; }
            public Image Img { get; set; }
        }


    其次,更改为下面的代码:

    public List<BoolTag> _Address;
            [Category("_UserSetting")]
            public List<BoolTag> Address
            {
                get => _Address;
                set
                {
                    if (value != null)
                    {
                        _Address = value;
                    }
                }
            }

    然后,删除掉第一个项目中的usercontrol,然后通过choose Items的方式添加那个usercontrol.

    最后,添加那个新的usercontrol,再次build下就没有问题了。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2020年10月28日 9:50
    版主
  • Hi 冬日厦语,

    感谢您的反馈。

    根据我的测试,你可以尝试下面的步骤来解决这个问题。

    首先,定义BoolTag为类。

    [Serializable]
        public class BoolTag
        {
            public string Address { get; set; }
            public string Text { get; set; }
            public Image Img { get; set; }
        }


    其次,更改为下面的代码:

    public List<BoolTag> _Address;
            [Category("_UserSetting")]
            public List<BoolTag> Address
            {
                get => _Address;
                set
                {
                    if (value != null)
                    {
                        _Address = value;
                    }
                }
            }

    然后,删除掉第一个项目中的usercontrol,然后通过choose Items的方式添加那个usercontrol.

    最后,添加那个新的usercontrol,再次build下就没有问题了。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    您好,问题依旧,我重新做一个上传道百度网盘

    链接: https://pan.baidu.com/s/1TB1dhvBRuXll9cxOyKS1CQ 提取码: uy5m 复制这段内容后打开百度网盘手机App,操作更方便哦

    2020年10月30日 7:47