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

时间:2015-08-21 07:14:42

标签: c# winforms position panel scrollbars

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

我尝试使用panel.HorizontalScroll/VerticalScroll.Value,但我找不到此值与子位置之间的任何关系。

1 个答案:

答案 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);
    }
}