gpt4 book ai didi

c# - winforms中滚动条处理滚动事件

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:54 24 4
gpt4 key购买 nike

我正在创建一个如下所示的表单。

Form1 有两个面板:

  • 底部面板(黄色)
  • 顶部面板,它本身由两个面板组成:
    • 左侧面板(红色)
    • 右侧面板(绿色)

enter image description here

如图所示,顶部面板超出了 form1 的高度,所以我想使用滚动条。我有几个问题:

a) 在顶部面板中将自动滚动设置为 true 不起作用。

b) 如果我在顶部面板上放置一个按钮,其位置超过 form1 的高度,那么它会滚动,但如果我将它放在它的任何子面板(红色或绿色)中则不会滚动

c) 我可以创建自己的滚动条,而不是在顶部面板中将自动滚动设置为 true,但我找不到一个简单的示例来处理移动面板的滚动事件,以便视口(viewport)更改为想要的。

如何正确添加具有所需行为的滚动条?

最佳答案

正如 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);
}
}
}

关于c# - winforms中滚动条处理滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43546724/

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