Получить родителей контроля в winforms
Я имею Panel1
внутри этого Panel2
и внутри этого Panel3
... так представь как
Panel1->Panel2->Panel3->button1
Итак, как можно получить строку пути, как
string path=\Panel1\Panel2\Panel3\button1
если я хочу, чтобы получить все родители Button1.
И могу ли я сделать это, используя определение класса, который реализует IExtenderProvider, так что это возможно сделать во время разработки.
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;
}
}
}
}
А вот свойство UserControl, которое я добавил в проект и которое будет использовать его:
public partial class CustomControl : UserControl
{
public CustomControl()
{
InitializeComponent();
}
public string ControlPath
{
get
{
return string.Join(@"\", this.GetControlPath().Reverse());
}
}
}
После сборки перетащите пользовательский элемент управления на форму из панели инструментов. Обязательно вложите его в другие элементы управления довольно хорошо. Я вложил 3 панели и поместил их в самую внутреннюю панель, как в вашем примере. Вот как выглядят свойства во время разработки:
Это должно быть применимо к любому классу, который вы делаете, который происходит от Control
, IExtenderProvider
кажется неуместным здесь.