在winforms中获得控制权的父母

时间:2013-05-09 21:43:05

标签: c# winforms iextenderprovider

我在Panel1Panel2Panel3内... {想象一下

Panel1->Panel2->Panel3->button1

那么如何获得类似

的路径字符串
string path=\Panel1\Panel2\Panel3\button1

如果我想得到 button1 的所有家长。
我可以使用定义实现IExtenderProvider的类来实现,因此可以在设计时使用它。

1 个答案:

答案 0 :(得分:1)

以下是将所有父母姓名作为IEnumerable<string>

的扩展方法
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;
            }                
        }
    }
}


这是我添加到Project中的UserControl的一个属性,它将使用它:

public partial class CustomControl : UserControl
{
    public CustomControl()
    {
        InitializeComponent();
    }

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


构建完成后,将用户控件从工具箱拖到窗体上。一定要将它嵌入其他控件中。我嵌套了3个面板并将其放在最里面的面板中,类似于您的示例。以下是设计时属性的外观:

User Control Properties

这适用于您从Control派生的任何课程。 IExtenderProvider似乎与此无关。