新文章 网摘 文章 随笔 日记

如何在 TabPages/TabControl 中滚动

我创建了一个新的 Visual Studio WinForms 项目。保持表单设计器完全为空并使用您的代码:

public Form1()
{
    InitializeComponent();

    // Make TabControl
    TabControl tabControl1 = new TabControl();
    tabControl1.TabPages.Add(new TabPage());
    tabControl1.TabPages.Add(new TabPage());
    tabControl1.Dock = DockStyle.Fill;
    this.Controls.Add(tabControl1);

    // Make long ListView and add to first tab
    ListView listView1 = new ListView();
    listView1.Location = new Point(0, 0);
    listView1.Height = 1000;
    tabControl1.TabPages[0].Controls.Add(listView1);

    // Your code
    foreach (TabPage _Page in tabControl1.TabPages)
    {
        _Page.AutoScroll = true;
        _Page.AutoScrollMargin = new System.Drawing.Size(20, 20);
        _Page.AutoScrollMinSize = new System.Drawing.Size(_Page.Width, _Page.Height);
    }
}

工作得很好。我怀疑您还有其他问题,但是如果没有看到您的代码,我就看不到它或对其进行故障排除。

编辑:现在您发布了更多代码,您的问题在于您的列表框:

lvwAlbums.Parent = pctlDatabeheer.TabPages[1];
lvwAlbums.Left = 0;
lvwAlbums.Top = 0;
lvwAlbums.Width = pctlDatabeheer.TabPages[1].Width - 35;
lvwAlbums.Height = 1000;
lvwAlbums.SmallImageList = iltListView;
lvwAlbums.FullRowSelect = true;
// Here is the issue!
// Do not anchor to the bottom or scrolling won't work
lvwAlbums.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; 

不要将控件锚定到底部。这就是你的问题。您不能锚定到底部然后滚动。其他锚都很好。

 

https://stackoverflow.com/questions/12583235/how-to-scroll-in-tabpages-tabcontrol

 

https://social.msdn.microsoft.com/forums/windows/en-US/3044f7d6-587f-41c6-8b0e-b83357e37e15/scroll-bars-in-tab-control

 

其实更好的办法是在TabPage中添加一个Panle

Panel panel = new Panel
{
AutoScroll = true,
};


不要设置Panle的Dock和Anchor

然后在TabPage的SizeChanged时,设置Panle的宽度,这样就能自动显示滚动条。

private void TabPage_SizeChanged(object sender, EventArgs e)
{
var tabPage = (TabPage)sender;
var panel = tabPage.Controls.OfType<Panel>().FirstOrDefault();

if (panel == null) return;
panel.Width = TabControl.ClientSize.Width - TabControl.Left - 20;
panel.Height = TabControl.ClientSize.Height - TabControl.Top - 40;
}

 

使用:
var tabPage = new TabPage(form.Text + " ╳")
{
Margin = new Padding(0),
Name = form.Text
};

Panel panel = new Panel
{
AutoScroll = true,
};
panel.Controls.Add(form);

tabPage.Controls.Add(panel);
TabControl.TabPages.Insert(0, tabPage);
TabControl.SelectTab(tabPage);

TabPage_SizeChanged(tabPage, null);
tabPage.SizeChanged += TabPage_SizeChanged;

posted @ 2022-02-04 08:46  岭南春  阅读(1017)  评论(0)    收藏  举报