我在Panel1
内Panel2
和Panel3
内... {想象一下
Panel1->Panel2->Panel3->button1
那么如何获得类似
的路径字符串string path=\Panel1\Panel2\Panel3\button1
如果我想得到 button1 的所有家长。
我可以使用定义实现IExtenderProvider的类来实现,因此可以在设计时使用它。
答案 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个面板并将其放在最里面的面板中,类似于您的示例。以下是设计时属性的外观:
这适用于您从Control
派生的任何课程。 IExtenderProvider
似乎与此无关。