滚动期间如何在自动滚动面板中找到第一个可见标签
How to find the first visible Label in an autoscroll Panel during scroll
你好,我有一个问题。
我有一个 Panel
,其中包含例如 1000 个 Label
控件,每个标签的高度在 Windows 表单应用程序中是可变的,我将找到第一个标签的位置垂直滚动面板时在面板中看到。
这是我的 Panel
和 Label
控件的屏幕截图:
您可以遍历 Controls
集合,直到找到 Label
:
Label getTopLabel(Panel container)
{
for (int y = 0; y < 60; y+= 10)
{
Label lbl = (Label)container.GetChildAtPoint(new Point(20, y));
if (lbl != null) return lbl;
}
return null;
}
我的示例假设两个 Labels
之间的间隙不大于 60
像素,并且所有 Labels
都可以在 X=20
处找到并且至少 [=18] =] 高..修改以适合您的数字!
您可以随时调用该函数..:[=19=]
private void panel1_Scroll(object sender, ScrollEventArgs e)
{
Control ctl = getTopLabel(panel1);
if (ctl != null) Text = ctl.Name;
}
无论大小和距离如何,您都可以在容器 Panel
中找到顶部 Label
控件:
private void container_Scroll(object sender, ScrollEventArgs e)
{
var labels = container.Controls.OfType<Label>().OrderBy(x => x.Top);
var top = labels.Where(l => container.ClientRectangle.IntersectsWith(l.Bounds))
.FirstOrDefault();
if (top != null)
{
this.Text = top.Name;
top.BackColor = Color.Gold;
labels.Except(new[] { top }).ToList().ForEach(x => x.BackColor = Color.Silver);
}
}
在上面的代码中,我首先根据标签Top
对标签进行了排序,然后我得到了第一个与容器面板绑定的标签。
要查找顶部项目的位置,找到它后,使用top.Location
。
你好,我有一个问题。
我有一个 Panel
,其中包含例如 1000 个 Label
控件,每个标签的高度在 Windows 表单应用程序中是可变的,我将找到第一个标签的位置垂直滚动面板时在面板中看到。
这是我的 Panel
和 Label
控件的屏幕截图:
您可以遍历 Controls
集合,直到找到 Label
:
Label getTopLabel(Panel container)
{
for (int y = 0; y < 60; y+= 10)
{
Label lbl = (Label)container.GetChildAtPoint(new Point(20, y));
if (lbl != null) return lbl;
}
return null;
}
我的示例假设两个 Labels
之间的间隙不大于 60
像素,并且所有 Labels
都可以在 X=20
处找到并且至少 [=18] =] 高..修改以适合您的数字!
您可以随时调用该函数..:[=19=]
private void panel1_Scroll(object sender, ScrollEventArgs e)
{
Control ctl = getTopLabel(panel1);
if (ctl != null) Text = ctl.Name;
}
无论大小和距离如何,您都可以在容器 Panel
中找到顶部 Label
控件:
private void container_Scroll(object sender, ScrollEventArgs e)
{
var labels = container.Controls.OfType<Label>().OrderBy(x => x.Top);
var top = labels.Where(l => container.ClientRectangle.IntersectsWith(l.Bounds))
.FirstOrDefault();
if (top != null)
{
this.Text = top.Name;
top.BackColor = Color.Gold;
labels.Except(new[] { top }).ToList().ForEach(x => x.BackColor = Color.Silver);
}
}
在上面的代码中,我首先根据标签Top
对标签进行了排序,然后我得到了第一个与容器面板绑定的标签。
要查找顶部项目的位置,找到它后,使用top.Location
。