Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# winforms中滚动条处理滚动事件_C#_Winforms - Fatal编程技术网

C# winforms中滚动条处理滚动事件

C# winforms中滚动条处理滚动事件,c#,winforms,C#,Winforms,我正在创建一个如下所示的表单 Form1有两个面板: 底部面板(黄色) 顶部面板本身由两个面板组成: 左侧面板(红色) 右面板(绿色) 如图所示,顶部面板超过了form1的高度,因此我想使用滚动条。我有几个问题: a) 在顶部面板中将自动滚动设置为true不起作用 b) 如果我把一个按钮放在顶部面板上,其位置超过form1的高度,那么它会滚动,但如果我把它放在它的任何子面板上(红色或绿色),它就不会滚动 c) 我可以创建自己的滚动条,而不是在顶部面板中将auto scroll设置为tr

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

Form1有两个面板:

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

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

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

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

c) 我可以创建自己的滚动条,而不是在顶部面板中将auto scroll设置为true,但是我找不到一个简单的示例来处理滚动事件,从而移动面板,从而根据需要更改视图端口


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

正如LarsTech和Hans Passant所建议的那样,AutoScrollMinSize工作正常,因此a和b问题得以解决

关于问题C,我认为有一种方法可以创建一个滚动条,这样它的行为就像我猜99%的滚动条的行为一样(只是为了移动所需的面板)。最后,我自己编写了这个逻辑

我添加了一个滚动条1作为基本表单的控件。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);
    }
  }
}

你想在什么地方设置滚动条,在窗体上还是在黄色面板上?@vendettamit我想在“顶部”面板中设置一个垂直滚动条,该面板由红色和绿色面板组成。这三个面板看起来都应该停靠-底部、左侧和填充。为您希望滚动条显示在其中的面板设置AutoScrollMinSize。@de3您能在VS中打开
文档大纲
窗口并在窗体上添加面板层次结构的屏幕截图吗?AutoScroll没有效果,因为面板没有任何需要滚动条才能完全可见的子控件。这就引出了为什么需要滚动条的问题。设置面板的AutoScrollMinSize是强制滚动条的另一种方式。再说一遍,也许您实际上是在寻找表单的AutoScroll属性。