我有一个从Form派生的MdiClient,我使用此控件的表面进行GDI +绘图。我遇到麻烦实现我自己的滚动控制。我将AutoScroll和AutoSize属性都设置为false并尝试使用表单自己的水平/垂直滚动条而不是放置我自己的。观察到的形式的行为非常令人困惑。首先,有两个属性(A)HScroll和(B)HorizontalScroll,它们也允许访问Visible属性。
我最终设置HorizontalScroll.Visible = true并保留HScroll = false(垂直相同),但我很好奇为什么有两个。文档意味着两者都控制水平滚动条的可见性,但它们似乎不访问相同的数据。此外,看起来每个油漆都会重置HScroll。目前我忽略了HScroll / VScroll的存在。我的申请可以吗?
对我来说更重要的是能力控制拇指在滚动条上的位置。我设置VerticalScroll属性Minimum = 0,Maximum = 100,Value = 50但是当显示表单时,thumb位于滚动条的开头而不是中间。为什么?此外,当用户单击水平滚动条时,将调用水平滚动的事件处理程序,但同时表单已将VerticalScroll.Value重置为0(不会引发垂直滚动事件)。到底是怎么回事?
我可能不明白框架是如何期望我实现我需要的。有人可以解释一下。
答案 0 :(得分:0)
只需将AutoScrollMinSize设置为所需的画布。
快速举例:
using System.Drawing;
using System.Drawing.Drawing2D;
private void Form1_Load(object sender, EventArgs e)
{
this.AutoScrollMinSize = new Size(1200, 1200);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(SystemColors.Window);
using (Matrix mx = new Matrix(1, 0, 0, 1, this.AutoScrollPosition.X, this.AutoScrollPosition.Y))
{
e.Graphics.Transform = mx;
e.Graphics.FillEllipse(Brushes.Red, new Rectangle(250, 250, 100, 100));
}
}
请参阅此链接:Understanding Windows Forms AutoScroll和How to back-track the mouse to the virtual page
答案 1 :(得分:0)
LarsTech表示,他向我指出了良好的解决方案。设置大型AutoScrollMinSize会自动执行启用和控制表单滚动条所需的任何操作。有一个潜在的陷阱值得关注。请注意,在显示表单之前,将忽略设置AutoScrollPosition的程序性尝试。因此,如果您希望使用不在默认(0,0)位置的滚动条打开表单,请将代码放在form_shown事件处理程序中。