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

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 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题