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

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日