C# .NET选项卡控件容器锚定问题

C# .NET选项卡控件容器锚定问题,c#,winforms,layout,tabcontrol,anchor,C#,Winforms,Layout,Tabcontrol,Anchor,我在c#Winforms上遇到了一个严重的问题(承认我没有尝试过VB.NET),我在一个页面上有一个TabControl,还有4个TabPages 在最小化表单后显示表单时,我有一些身份验证逻辑来显示/隐藏这些选项卡页。这种“隐藏”逻辑实质上会删除选项卡,并在表单验证时重新插入它们 因此,首先将应用程序最小化。我将其还原,身份验证失败,因此选项卡将被删除。我再次最小化应用程序,恢复窗口,通过身份验证,然后插入选项卡。但是,页面中锚定到相对侧的控件(左、右、上、下以允许它们拉伸)似乎已损坏。顶部/

我在c#Winforms上遇到了一个严重的问题(承认我没有尝试过VB.NET),我在一个页面上有一个TabControl,还有4个TabPages

在最小化表单后显示表单时,我有一些身份验证逻辑来显示/隐藏这些选项卡页。这种“隐藏”逻辑实质上会删除选项卡,并在表单验证时重新插入它们

因此,首先将应用程序最小化。我将其还原,身份验证失败,因此选项卡将被删除。我再次最小化应用程序,恢复窗口,通过身份验证,然后插入选项卡。但是,页面中锚定到相对侧的控件(左、右、上、下以允许它们拉伸)似乎已损坏。顶部/左侧位置正常,但相反的位置似乎已超出可见页面

我猜这一切都与页面的删除和添加有关,但是有人以前见过这种情况并知道为什么会发生吗??(更重要的是,了解变通方法):)

请注意,我隐藏/显示选项卡的代码使用了如下函数:-

private void TabControlPageVisible(TabPage page, Boolean show)
    {
        if (show)
        {
            if (!tabControlMain.TabPages.Contains(page))
            {
                tabControlMain.TabPages.Insert(0, page);
                page.ResumeLayout();
            }
        }
        else
        {
            if (tabControlMain.TabPages.Contains(page))
            {
                page.SuspendLayout();
                tabControlMain.TabPages.Remove(page);
            }
        }
    }

干杯!:)

您是在每个页面上使用布局方法,还是只是定位控件?一个(麻烦的)解决方案是存储每个控件的位置。更好的办法是使用布局。

我只是手动定位控件。我没有在代码中使用过太多的布局,但从这种方式来看,如果我找不到解决方案,我可能不得不这样做,希望在重新绘制它们时,它能考虑表单的大小!摆脱Suspend/ResumeLayout调用,这看起来很糟糕。你为什么要使用minimize/restore来实现这种逻辑呢。有一个更好的方法来做你想做的事。汉斯,我已经加入了Suspend/ResumeLayout调用来尝试修复它,但是没有任何效果,移除它们也没有任何区别:(埃里克,很高兴你说有更好的方法,但是请告诉我们?