使面板可滚动

时间:2016-01-22 18:16:59

标签: c# winforms panel

我正在开发一个简单的Windows窗体应用程序,它由Panel组成,我用Graphic绘制图形。我们可以说,我的面板现在的尺寸 300x300 但内部的内容 500x500 。显然,我需要将滚动条添加到Panel

到目前为止我的代码:

public CircuitControl()
{
    // Initialize empty list of circuit objects
    CircuitObjects = new List<CircuitObject>();

    drawingAreaPanel.AutoScroll = true;
    drawingAreaPanel.VerticalScroll.Enabled = true;
    drawingAreaPanel.VerticalScroll.Visible = true;
    drawingAreaPanel.HorizontalScroll.Enabled = true;

    drawingAreaPanel.MaximumSize = new Size(300, 300);
    drawingAreaPanel.Size = new Size(600, 600);
}

但这些代码都没有创建实际的滚动条。我的问题是:我在哪里以及如何设置我实际绘制的Panel的大小?我认为这是缺少的部分。感谢。

3 个答案:

答案 0 :(得分:2)

直到ansible-pull中的某些内容无法全部显示,滚动条才会显示。

尝试在Panel内放置一个较大的控件,例如PictureBox,并将Panel的初始大小设置为大于PictureBox

答案 1 :(得分:0)

只需添加:

drawingAreaPanel.AutoScroll = true;

它将自动完成。

€dit:不要忘记设置锚点以获取滚动条。

答案 2 :(得分:0)

简洁明了的方法是设置AutoScrollMinSize。这会显示滚动条(如果将另一个值保留为0,则只显示一个) 现在绘制图形对象将自动滚动。 这可以通过变换矩阵轻松实现,变换矩阵在绘制之前设置并通过滚动偏移转换绘图 一个很好的例子:(当然没有进一步优化,这会闪烁)

private void button1_Click(object sender, EventArgs e)
{
    using(Form frm = new Form())
    {
        Panel pnl = new Panel();
        pnl.Paint += delegate (Object snd, PaintEventArgs e2)  {
            Matrix mtx = new Matrix();
            mtx.Translate(pnl.AutoScrollPosition.X, pnl.AutoScrollPosition.Y);
            e2.Graphics.Transform = mtx;
            e2.Graphics.Clear(Color.Black);
            for(int i=0; i <= 125; i++)
                for(int j=0; j <= 125; j++)
                    using(Brush b = new SolidBrush(Color.FromArgb(255, 255-i*2, j*2, (i*j) % 255)))
                        e2.Graphics.FillRectangle(b, new Rectangle(5+j*20, 5+i*20, 20, 20));
        };
        pnl.AutoScrollMinSize = new Size(126*20+10, 126*20+10);
        pnl.Dock = DockStyle.Fill;
        frm.Controls.Add(pnl);
        frm.Padding = new Padding(25);
        frm.ShowDialog(this);
    }
}