首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在winforms中获取控件的父母

在winforms中获取控件的父母
EN

Stack Overflow用户
提问于 2013-05-09 21:43:05
回答 1查看 3.9K关注 0票数 2

我有Panel1Panel2里面,在Panel3里面.所以想象一下

代码语言:javascript
复制
Panel1->Panel2->Panel3->button1

那么,如何获得路径字符串,如

代码语言:javascript
复制
string path=\Panel1\Panel2\Panel3\button1

如果我想要得到button1的所有父母。

我能用它来定义一个实现IExtenderProvider的类吗?那么在设计时就可以这样做了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-10 02:31:55

下面是一个扩展方法,可以将所有父母的名字作为IEnumerable<string>获取

代码语言:javascript
复制
public static class Extensions
{
    public static IEnumerable<string> GetControlPath(this Control c)
    {
        yield return c.Name;

        if (c.Parent != null)
        {
            Control parent = c.Parent;

            while (parent != null)
            {
                yield return parent.Name;
                parent = parent.Parent;
            }                
        }
    }
}

下面是我添加到项目中的UserControl的一个属性,它将利用它:

代码语言:javascript
复制
public partial class CustomControl : UserControl
{
    public CustomControl()
    {
        InitializeComponent();
    }

    public string ControlPath
    {
        get
        {
            return string.Join(@"\", this.GetControlPath().Reverse());
        }
    }
}

生成后,将用户控件从工具箱拖到窗体上。一定要把它嵌套在其他控件中,非常好。我嵌套了3个面板,并将其放在最内部的面板中,类似于您的示例。下面是这些属性在设计时的样子:

这应该适用于从Control派生的任何类。IExtenderProvider在这里似乎无关紧要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16471631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档