我正在开发c# winforms个应用。我有一个Panel
控件,里面有多个子控件(其中一些放在面板的不可见区域,有AutoScroll = true
)。是否可以相对于他的一个孩子设置Panel
的滚动条位置?例如,在Button
点击滚动条设置在适当的位置以显示隐藏在之前滚动条位置的控件(因为控件位于不可见区域)?
我尝试使用panel.HorizontalScroll/VerticalScroll.Value
,但我找不到此值与子位置之间的任何关系。
答案 0 :(得分:0)
根据Loathing的评论,我修改了您的代码。我已将panel1
设为实例变量,而不是在构造函数中声明它,因为必须在butShowChild1_Click
中访问它。此外,butShowChild1
未添加到面板中。我把它添加到面板中。
修改后的代码:
public partial class Form1 : Form
{
PictureBox child1 = new PictureBox();
PictureBox child2 = new PictureBox();
Panel panel1;
public Form1()
{
InitializeComponent();
this.Size = new Size(539, 448);
panel1 = new Panel();
panel1.Size = new Size(this.Width - 30, this.Height - 50);
panel1.AutoScroll = true;
this.Controls.Add(panel1);
child1.Size = new Size(50, 50);
child1.BackColor = Color.Red;
child1.Location = new Point(500, 500); //child1 will be invisible after run due to it's position
panel1.Controls.Add(child1);
child2.Size = new Size(50, 50);
child2.BackColor = Color.Green;
child2.Location = new Point(10, 10); //child2 will be visible after run
panel1.Controls.Add(child2);
Button butShowChild1 = new Button() { Location = new Point(70, 70), Text = "Bring Control Into View", AutoSize = true };
panel1.Controls.Add(butShowChild1);
butShowChild1.Click += butShowChild1_Click;
}
private void butShowChild1_Click(object sender, EventArgs e)
{
//Set panel1 scrollbars position to make child1 visible
panel1.ScrollControlIntoView(child1);
}
}