こんにちは私は質問があります。 Panel
には、たとえば、Windowsフォームアプリケーションで各ラベルの高さが可変で、パネルを垂直にスクロールするときにパネルに表示される最初のラベルの位置を見つける1000 Label
コントロールが含まれています。ここでスクロール中に自動スクロールパネルの最初の可視ラベルを見つける方法
は私Panel
とLabel
コントロールのスクリーンショットです:
こんにちは私は質問があります。 Panel
には、たとえば、Windowsフォームアプリケーションで各ラベルの高さが可変で、パネルを垂直にスクロールするときにパネルに表示される最初のラベルの位置を見つける1000 Label
コントロールが含まれています。ここでスクロール中に自動スクロールパネルの最初の可視ラベルを見つける方法
は私Panel
とLabel
コントロールのスクリーンショットです:
あなたはLabel
Controls
コレクションのループを見つけることができるまで:
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
で、少なくとも10 pixels
の高さです。あなたの数字に合わせて変更してください!
必要にいつでもあなたが関数を呼び出すことができます..:
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);
}
}
:
はprivate void panel1_Scroll(object sender, ScrollEventArgs e)
{
Control ctl = getTopLabel(panel1);
if (ctl != null) Text = ctl.Name;
}
おかげでたくさんTAW –
おお!このコードはスクロールのためにのみOKですが、クリックすると上下にクリックすると機能しません。 –
「上」と「下」とは何ですか?また、関数に変換していつでも呼び出すことができます。 – TaW