没心没肺仰天笑 2023-09-22 10:04 采纳率: 0%
浏览 32

winform 自定义控件使用自定义属性List对象,在属性窗口编辑数据点击确定后,设计窗体的自定义控件数据不会刷新,要点一下窗体才会刷新

winform 自定义控件使用自定义属性List对象,在属性窗口编辑数据点击确定后,设计窗体的自定义控件数据不会刷新,要点一下窗体才会刷新,要怎样才会修改数据后就更新了呢?

        /// <summary>
        /// 显示项
        /// </summary>
        List<string> showstring = new List<string> { "1", "2", "3" };
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design", "System.Drawing.Design.UITypeEditor, System.Drawing")]
        [TypeConverter(typeof(System.ComponentModel.CollectionConverter))]
        [Browsable(true), Category("自定义属性"), Description("显示的内容")]
        public List<string> ShowItemStr
        {
            get
            {
                return showstring;
            }
            set
            {
                
                showstring = value;
                this.Update();
                this.Refresh();

            }
        }

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-22 12:01
    关注

    【以下回答由 GPT 生成】

    由于Winform的属性窗口对于List类型的属性在修改后无法自动刷新数据,需要手动更新。为了实现自动更新,在设置ShowItemStr属性值后,可以通过事件来触发控件的刷新。

    以下是修改后的代码:

    private List<string> showstring = new List<string> { "1", "2", "3" };
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design", "System.Drawing.Design.UITypeEditor, System.Drawing")]
    [TypeConverter(typeof(System.ComponentModel.CollectionConverter))]
    [Browsable(true), Category("自定义属性"), Description("显示的内容")]
    public List<string> ShowItemStr
    {
        get
        {
            return showstring;
        }
        set
        {
            showstring = value;
            OnShowItemStrChanged(EventArgs.Empty);
        }
    }
    
    // 定义一个事件
    public event EventHandler ShowItemStrChanged;
    
    // 触发自定义事件
    protected virtual void OnShowItemStrChanged(EventArgs e)
    {
        ShowItemStrChanged?.Invoke(this, e);
    }
    

    然后,在自定义控件的构造函数中订阅事件,并在事件处理方法中调用this.Refresh()来实现刷新:

    // 自定义控件的构造函数
    public CustomControl()
    {
        InitializeComponent();
        // 订阅事件
        this.ShowItemStrChanged += CustomControl_ShowItemStrChanged;
    }
    
    // 事件处理方法
    private void CustomControl_ShowItemStrChanged(object sender, EventArgs e)
    {
        this.Refresh();
    }
    

    这样,在属性窗口中修改了ShowItemStr的数据后,会自动触发ShowItemStrChanged事件,并调用this.Refresh()来刷新控件的显示。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月22日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀