gpt4 book ai didi

c# - 计算 ScrollBar 滚动百分比;滚动条的高度 "bar"?

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:30 26 4
gpt4 key购买 nike

我试图确定滚动条的百分比值以响应其 OnScroll 事件,但我很难确定实际百分比。我认为它应该像当前滚动值除以最大值的比率一样简单。尽管这会产生奇怪的结果。

void ThePanel_Scroll(object sender, ScrollEventArgs e)
{
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
{
double scrollPercent = (double)e.NewValue / (double)ThePanel.VerticalScroll.Maximum;
Console.Out.WriteLine("Max: " + ThePanel.VerticalScroll.Maximum + " Min: " + ThePanel.VerticalScroll.Minimum);
Console.Out.WriteLine("OldVal: " + e.OldValue + " NewVal: " + e.NewValue + " Val: " + ThePanel.VerticalScroll.Value);
Console.Out.WriteLine("CurPer: " + scrollPercent);
}
}

当运行这段代码,并将条一直滚动到最大位置时,我可能会得到这样的输出

Max: 529 Min: 0
OldVal: 170 NewVal: 170 Val: 170
CurPer: 0.321361058601134

即使滚动条处于最大位置,它的 Value 也不是。我认为原因是 Value 基于滚动条的顶部。我的问题是我无法确定滚动条“bar”本身的高度/大小来计算适当的百分比。

确定百分比的正确方法是根据使用条形高度和 Value,还是我遗漏了其他东西?如果它是基于高度,我该如何确定?通读VScrollProperties MSDN那里没有任何东西可以告诉我酒吧本身的高度。

最佳答案

由于非零拇指高度,滚动条位置存在固有的歧义。您认为拇指的哪一侧是“活跃”的一侧? Windows 无法帮助您解决这个问题,当拇指接近最大位置时,它会突然从一侧切换到另一侧。如果您不对此进行补偿,那么您将失去一部分范围。

解决方法是消除翻转行为并应用您自己的有效最大值。像这样:

    private void panel1_Scroll(object sender, ScrollEventArgs e) {
if (e.ScrollOrientation == ScrollOrientation.VerticalScroll) {
var max = panel1.VerticalScroll.Maximum - panel1.VerticalScroll.LargeChange;
var pos = Math.Min(max, e.NewValue);
var percentage = 100.0 * pos / max;
// etc...
}
}

关于c# - 计算 ScrollBar 滚动百分比;滚动条的高度 "bar"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com