当标签的父类是一个PictureBox时,在UserControl中按名称查找标签
本文关键字:标签 UserControl 查找 一个 父类 PictureBox | 更新日期: 2023-09-27 17:53:50
我有一个用户控件,上面有多个图片框和标签。我需要将每个标签(lb)放在他自己的Picturebox (pbParent)上,并且标签Backcolor必须是透明的,以提高这个图片框下的Picturebox图像可见性。图片框命名为TabFrame0 ~ TabFrameN,标签命名为Label0 ~ LabelN。
我有一个函数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;
}
您需要递归地迭代子元素的子元素(如果有的话)。例如:
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;
}