我有Panel1在Panel2里面,在Panel3里面.所以想象一下
Panel1->Panel2->Panel3->button1那么,如何获得路径字符串,如
string path=\Panel1\Panel2\Panel3\button1如果我想要得到button1的所有父母。
我能用它来定义一个实现IExtenderProvider的类吗?那么在设计时就可以这样做了。
发布于 2013-05-10 02:31:55
下面是一个扩展方法,可以将所有父母的名字作为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;
}
}
}
}下面是我添加到项目中的UserControl的一个属性,它将利用它:
public partial class CustomControl : UserControl
{
public CustomControl()
{
InitializeComponent();
}
public string ControlPath
{
get
{
return string.Join(@"\", this.GetControlPath().Reverse());
}
}
}生成后,将用户控件从工具箱拖到窗体上。一定要把它嵌套在其他控件中,非常好。我嵌套了3个面板,并将其放在最内部的面板中,类似于您的示例。下面是这些属性在设计时的样子:

这应该适用于从Control派生的任何类。IExtenderProvider在这里似乎无关紧要。
https://stackoverflow.com/questions/16471631
复制相似问题