我的FlowLayoutPanel
包含User Controls
,从上到下包含垂直滚动条。
与任何其他可滚动控件一样,我可以逐个像素地滚动它。
有没有办法(.NET Framework或原生API方式)在User Control
之后滚动它User Control
,以便捕捉到下一个或上一个User Control
?它们可以有不同的高度。
我想逐行滚动显示DataGridView
或 Excel / Calc 。
答案 0 :(得分:0)
我这个问题 - How to make scrollviewer scroll pixels not components (wpf),你期望的行为是不受欢迎的。因此,您可以执行用户在所描述的问题中所做的事情。
您的问题与引用的问题之间的本质区别在于主机控制。您已使用FlowLayoutPanel
,并在引用的问题StackPanel
中使用。
那么,如果您的应用程序是WPF应用程序,您可以将其更改为StackPanel
吗?
在FlowLayoutPanel上使用AutoScroll=True
设置这些属性WrapContent=True
不起作用吗?
答案 1 :(得分:0)
快速而肮脏的解决方案。
设置AutoScroll=false
,添加VScrollBar
,并输入以下代码:
vScrollBar1.Maximum = MyList.VerticalScroll.Maximum;
vScrollBar1.SmallChange = MyList.VerticalScroll.SmallChange;
vScrollBar1.LargeChange = MyList.VerticalScroll.LargeChange;
vScrollBar1.Scroll += (sender, args) =>
{
switch (args.Type)
{
case ScrollEventType.ThumbTrack:
var sum = 0;
Control prevCtrl = null;
foreach (Control control in MyList.Controls)
{
if (prevCtrl == null || control.Bottom > prevCtrl.Bottom)
{
if (args.OldValue >= sum && args.OldValue < sum + control.Height)
{
MyList.AutoScrollPosition = new Point(0, sum);
}
sum += control.Height;
}
prevCtrl = control;
}
break;
}
}