如何实现自定义控件的滚动?

jay*_*t55 1 .net c# gdi+ gdi winforms

如何实现自定义控件的滚动?我的控件是完全自定义绘制的,其高度是可变的,并且控件的一部分包含一个菜单,因此,如果控件中有很多项目,则需要在其中放置滚动条。我真的无法找到有关如何执行此操作的任何线索。我确实看到了有关的信息ScrollableControl,但是我仍然不确定这是否是我需要的。

另外,我的控件如何知道何时需要显示滚动条?因为我的控件是完全自定义绘制的,所以里面没有真正的“控件”,所以只绘制了一堆像素,所以我不能像将AutoScroll设置为true一样,因为它不是控件的主要部分需要滚动,它是控件上需要滚动条的特定位置。

Lar*_*ech 5

如果您的自定义控件继承自Panel控件,则只需通过以下设置自己在自定义控件中设置内容的大小:

this.AutoScrollMinSize = New Size(yourWidth, yourHeight);
Run Code Online (Sandbox Code Playgroud)

如果控件的ClientSize.Height大于yourHeight,则不会获得任何滚动条。如果更少,则会显示一个滚动条。

在画图方法中,将此添加到开头:

protected override void OnPaint(PaintEventArgs e) {
  e.Graphics.TranslateTransform(this.AutoScrollPosition.X,
                                this.AutoScrollPosition.Y);
Run Code Online (Sandbox Code Playgroud)

现在,您绘制的所有内容都会自动转换为滚动坐标。