2013-01-16 2 views
1

У меня есть пользовательский элемент управления с несколькими изображениями и надписями на них. Мне нужно поместить каждую метку (lb) на свой собственный Picturebox (pbParent), а ярлык Backcolor должен быть прозрачным, чтобы улучшить видимость изображения PictureBox в этом окне. Ящики с изображениями называются TabFrame0 до TabFrameN, а ярлыки обозначаются Label0 - LabelN.Найти ярлык по имени в UserControl, когда родительский ярлык является PictureBox

У меня есть функция GetLabelByTag, которая должна вернуть ярлык, поиск по его названию. Он отлично работает, пока я не сделаю родительский ярлык PictureBox (см. Строку 8). Итак, мои вопросы: как найти ярлык, если он родительский, станет PictureBox, а не моим UserControl, какая коллекция содержит его?

void CreateControls() 
{ 
... 
    newLabel.Name = TAB_PIC_BOX_LABEL_NAME + _id.ToString(); //1 
    newLabel.Text = _text;//2 
    newLabel.Tag = _id;//3 
    newLabel.AutoSize = true;//4 

    Controls.Add(newLabel);//5 

    Label lb = GetLabelByTag(_id, TAB_PIC_BOX_LABEL_NAME);//6 
    PictureBox pbParent = GetPicBoxByTag(_id, TAB_PIC_BOX_CONTROL_NAME);//7 
    lb.Parent=pbParent;//8 
    lb.BringToFront();//9 
... 
} 

...

Label GetLabelByTag(int _tag, string _family) 
{ 
    Label rez = new Label(); 

    foreach (Control lb in Controls) 
    { 
     if (lb.Tag != null) 
     { 
      if (((int)lb.Tag == _tag) && (lb.Name == _family + _tag.ToString())) 
      { 
       rez = (Label)lb; 
      } 
     } 
    } 
    return rez; 
} 

ответ

1

Вам нужно рекурсивно перебирать детские детей, если таковые имеются. Например. например:

Label GetLabelByTag(int _tag, string _family) 
{ 
    return FindLabelByTag(_tag, _family, this); 
} 

Label FindLabelByTag(int _tag, string _family, Control _control) 
{ 
    Label rez = null; 

    foreach (Control lb in _control.Controls) 
    { 
     if (lb.Tag != null) 
     { 
      if (((int)lb.Tag == _tag) && (lb.Name == _family + _tag.ToString())) 
      { 
       return (Label)lb; 
      } 
     } 
     var inControl = FindLabelByTag(_tag, _family, lb); 
     if (inControl != null) 
      return inControl; 
    } 

    return null; 
} 
+0

это работает! Большое спасибо! – kirpi4

Смежные вопросы