我有一个用户控件,上面有多个图片框和标签。 我需要将每个Label(lb)放在他自己的Picturebox(pbParent)上,并且标签Backcolor必须是透明的,以改善此图片框下的PictureBox图像可见性。 图片框命名为TabFrame0到TabFrameN,标签名为Label0到LabelN。
我有一个函数 GetLabelByTag ,它必须返回按名称搜索的标签。它工作正常,直到我将Label的父级设为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;
}
答案 0 :(得分: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;
}