2013-05-09 3 views
2

У меня есть Panel1 внутри этого Panel2 и внутри этого Panel3 ... Итак, представьте, как
Получить Родители контроля в WinForms

Panel1->Panel2->Panel3->button1 

Итак, как можно получить строку пути, как

string path=\Panel1\Panel2\Panel3\button1 

если Я хочу получить все Родители button1.
И могу ли я сделать это с помощью определения класса, который реализует IExtenderProvider, так что можно сделать его во время разработки.

+0

'Control.Parent' может быть тем, что вы хотите. Не могли бы вы рассказать о концепции времени разработки, например, как установить строку в зависимости от времени разработки по сравнению с временем выполнения? –

+0

@JeremyThompson ahh my bad ... Я имею в виду, что я не хочу использовать свойство tag для элемента управления для назначения пути управления тегами. Я хочу использовать Extender Class, поэтому в моей программе я хочу получить значение этого свойства (путь) –

ответ

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 панели и поместил их в самую внутреннюю панель, похожую на ваш пример. Вот то, что свойства похожи на время проектирования:

User Control Properties

Это должно быть применимо к любому классу вы делаете, что происходит от Control. IExtenderProvider не подходит.