2013-01-16 54 views
1

我有一個帶有多個圖片框和標籤的用戶控件。 我需要將每個標籤(磅)放在他自己的Picturebox(pbParent)上,並且標籤Backcolor必須是透明的,以提高此圖片框下的PictureBox圖像可見性。 圖片框被命名爲TabFrame0到TabFrameN,並且標籤被命名爲Label0到LabelN。當標籤的Parent是一個PictureBox時,在UserControl中按名稱查找標籤

我有一個函數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