gpt4 book ai didi

c# - 如何以编程方式滚动面板

转载 作者:可可西里 更新时间:2023-11-01 07:52:51 29 4
gpt4 key购买 nike

我有一个包含一些内容的 System.Windows.Forms.Panel

我正在尝试以编程方式向上或向下滚动面板(垂直)。

我已尝试将 AutoScrollPosition 属性设置为面板上的新 Point,但似乎没有成功。

我将 AutoScroll 属性设置为 true。

我什至尝试按照建议将 VerticalScroll.Value 设置两次 here ,但这似乎也不起作用。

这是我目前正在做的:

//I have tried passing both positive and negative values.
panel.AutoScrollPosition = new Point(5, 10);

AutoScrollPosition 上的 X 和 Y 值保持为 0 和 0。

如有任何帮助或指导,我们将不胜感激。

提前致谢

马文

最佳答案

这是一个解决方案。我想您可以使用 Win32Panel 滚动到任意位置,但是这里有一个简单的技巧可以帮助您实现您的要求:

public void ScrollToBottom(Panel p){
using (Control c = new Control() { Parent = p, Dock = DockStyle.Bottom })
{
p.ScrollControlIntoView(c);
c.Parent = null;
}
}
//use the code
ScrollToBottom(yourPanel);

或者为了方便使用扩展方法:

public static class PanelExtension {
public static void ScrollToBottom(this Panel p){
using (Control c = new Control() { Parent = p, Dock = DockStyle.Bottom })
{
p.ScrollControlIntoView(c);
c.Parent = null;
}
}
}
//Use the code
yourPanel.ScrollToBottom();

更新

如果你想设置准确的位置,稍微修改上面的代码会有所帮助:

//This can help you control the scrollbar with scrolling up and down.
//The position is a little special.
//Position for scrolling up should be negative.
//Position for scrolling down should be positive
public static class PanelExtension {
public static void ScrollDown(this Panel p, int pos)
{
//pos passed in should be positive
using (Control c = new Control() { Parent = p, Height = 1, Top = p.ClientSize.Height + pos })
{
p.ScrollControlIntoView(c);
}
}
public static void ScrollUp(this Panel p, int pos)
{
//pos passed in should be negative
using (Control c = new Control() { Parent = p, Height = 1, Top = pos})
{
p.ScrollControlIntoView(c);
}
}
}
//use the code, suppose you have 2 buttons, up and down to control the scrollbar instead of clicking directly on the scrollbar arrows.
int i = 0;
private void buttonUp_Click(object sender, EventArgs e)
{
if (i >= 0) i = -1;
yourPanel.ScrollUp(i--);
}
private void buttonDown_Click(object sender, EventArgs e)
{
if (i < 0) i = 0;
yourPanel.ScrollDown(i++);
}

您可能想要使用的另一种解决方案是使用 Panel.VerticalScroll.Value。但是,我认为您需要进行更多研究才能使其按预期工作。因为我可以看到一旦更改 Value,滚动条位置和控件位置就不能很好地同步。请注意,Panel.VerticalScroll.Value 应介于 Panel.VerticalScroll.MinimumPanel.VerticalScroll.Maximum 之间。

关于c# - 如何以编程方式滚动面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752970/

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