我正在创建一个看起来像这样的表单。
Form1有两个面板:
如图所示,顶部面板超出了form1的高度,所以我想使用滚动条。我有几个问题:
a)在顶部面板中将自动滚动设置为true不起作用。
b)如果我在顶部面板上放置了一个按钮,其位置超过了form1的高度,那么它会滚动,但如果我把它放在任何子面板(红色或绿色)中则不是
c)不是在顶部面板中将自动滚动设置为true,我可以创建自己的滚动条,但我找不到一个简单的示例来处理移动面板的滚动事件,以便视图端口更改为期望的。
如何正确添加具有所需行为的滚动条?
答案 0 :(得分:1)
正如LarsTech和Hans Passant所说,AutoScrollMinSize有效,因此解决了a和b问题。
关于问题C,我认为有一种方法可以创建一个滚动条,使其行为就像我猜99%的滚动条应该表现一样(只是为了移动一个所需的面板)。最后,我自己编写了这个逻辑。
我添加了一个Scrollbar1作为基本表单的控件。 initialPanelY 在构造函数中被捕获。
这是响应滚动事件的代码。我只是根据滚动条值
移动面板panelRest2的Y位置using System;
.
.
using System.Windows.Forms;
namespace WindowsFormMyTests
{
public partial class Form1 : Form
{
int initialPanelY;
public Form1()
{
InitializeComponent();
initialPanelY = this.panelRest2.Location.Y;
}
private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
int v = (sender as VScrollBar).Value; //between 1 and 100
int hiddenPanelHeight = this.panelRest2.Size.Height - this.Size.Height;
float moveY = (float)hiddenPanelHeight * ((float)v / 100);
int newY = initialPanelY - (int)moveY;
this.panelRest2.Location = new Point(this.panelRest2.Location.X, newY);
}
}
}