如何在FlowLayoutPanel中使用VScrollBar类来代替他的滚动条

问题描述 投票:0回答:1

我正在尝试使用 VScrollBar 类而不是标准滚动条。我想这样做是因为我想更改滚动条的尺寸和颜色。

我正在尝试设置滚动条控件的最小值、最大值、SmallChange 和 LargeChange,但我找不到正确设置这些值的方法。

我是这样做的:

vScrollBar.Minimum = 0;
            vScrollBar.Maximum = this.pnlContainer.DisplayRectangle.Height;
            vScrollBar.LargeChange = vScrollBar.Maximum /
                         vScrollBar.Height + this.pnlContainer.Height;
            vScrollBar.SmallChange = 15;

但是,只有当我在面板中设置 AutoScroll=true 时,

this.pnlContainer.DisplayRectangle.Height
才是一个很好的值,但这样它就会显示他的滚动条。

我快疯了。

感谢您的帮助。

c# scrollbar flowlayoutpanel
1个回答
0
投票

您始终可以创建继承自Panel的自定义控件。 此自定义控件将包括您的自定义 VScrollBar。 在自定义控件中,重写 AutoScroll 属性以确保它根据需要切换标准滚动条和自定义 VScrollBar 的可见性。

以下是如何创建此类自定义面板控件的示例:

using System;
using System.Windows.Forms;

public class CustomPanel : Panel
{
    private VScrollBar vScrollBar;

    public CustomPanel()
    {
        // Initialize your custom VScrollBar
        vScrollBar = new VScrollBar();
        vScrollBar.Dock = DockStyle.Right;
        vScrollBar.Visible = false; // Initially, hide your custom scrollbar
        vScrollBar.Scroll += VScrollBar_Scroll;

        // Add the custom VScrollBar to the control collection
        Controls.Add(vScrollBar);
    }

    // Override the AutoScroll property to control scrollbar visibility
    public new bool AutoScroll
    {
        get { return base.AutoScroll; }
        set
        {
            base.AutoScroll = value;
            vScrollBar.Visible = value; // Show your custom scrollbar if AutoScroll is set to true
        }
    }

    private void VScrollBar_Scroll(object sender, ScrollEventArgs e)
    {
        // Handle scrolling logic here if needed
        // You can update the content position in response to scrolling
        // For example: Handle scrolling of child controls within the panel
        // This depends on your specific use case.
    }
}

使用此自定义面板控件,您可以像标准面板一样在表单中使用它,并且当 AutoScroll 设置为 true 时,它将显示您的自定义 VScrollBar。标准滚动条将被隐藏。然后,您可以将子控件添加到此自定义面板,并按照您想要的方式自定义其外观和行为。

© www.soinside.com 2019 - 2024. All rights reserved.