wozhaozhe2008 2023-11-15 21:56 采纳率: 100%
浏览 8
已结题

PropertyGrid怎么动态设置属性


public class GetData: StringConverter
{
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        //在这里动态生成属性,获取的是窗口上的控件列表
        return new StandardValuesCollection(new string[] { "Top", "Left", "Bottom", "Right", "Fill", "None" });
    }
    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
    {
        return true;
    }
}

我想问下,怎么把new string[] { "Top", "Left", "Bottom", "Right", "Fill", "None" }改成动态获取,比如获取窗口上的控件列表,

  • 写回答

1条回答 默认 最新

  • 关注

    看下这个例子

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        // 确保上下文和它的实例不为空
        if (context == null || context.Instance == null)
        {
            return new StandardValuesCollection(new string[0]);
        }
    
        // 尝试获取当前组件的父窗体
        Form form = (context.Instance as Control)?.FindForm();
    
        // 如果父窗体不为空,则获取窗体上所有控件的名称
        if (form != null)
        {
            // 使用LINQ获取所有控件的名称
            var controlNames = form.Controls.Cast<Control>()
                                .Select(control => control.Name)
                                .Where(name => !string.IsNullOrEmpty(name))
                                .ToArray();
    
            // 返回控件名称的标准值集合
            return new StandardValuesCollection(controlNames);
        }
    
        // 如果没有找到父窗体或控件,返回空的标准值集合
        return new StandardValuesCollection(new string[0]);
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 创建了问题 11月15日

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程