设置面板相对于所选子项的滚动条位置



我正在开发c# winforms应用程序。我有一个Panel控件,里面有多个子控件(其中一些被放置在有AutoScroll = true的面板的不可见区域)。是否可以设置Panel的滚动条位置相对于他的孩子之一?例如,在Button点击滚动条设置在适当的位置,以显示隐藏在以前的滚动条位置的控制(因为控制是在不可见的区域)?

我尝试了panel.HorizontalScroll/VerticalScroll.Value,但我找不到这个值和孩子位置之间的任何关系。

接受了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);
    }
}

最新更新