我正在开发一个简单的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
的大小?我认为这是缺少的部分。感谢。
答案 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);
}
}