如何在以下面板示例中使所有控件可见

Posted

技术标签:

【中文标题】如何在以下面板示例中使所有控件可见【英文标题】:How to make all controls visible in following panel example 【发布时间】:2015-10-26 18:16:02 【问题描述】:

我是 winforms 的新手,我遇到了我自己无法解决的问题。

我想动态地将按钮添加到图片中的“右下面板”。问题是,如果我需要添加大量按钮,那么来自上述面板底部的按钮将覆盖有图片中面板后面的控件(面板)。这个案例显示了我首先将“右下面板”添加到“右面板”然后“右上面板”。

如果我反转它,首先将“右下面板”添加到“右面板”,然后将“右上面板”添加到“右面板”,那么“右上面板”会覆盖右下角顶部的两个按钮面板,但带有“右下面板”滚动条的所有其他按钮(包括右下面板底部的按钮)。

我的问题是如何显示“右下面板”中的所有按钮?

提前谢谢你,我希望你能理解我的英语。

更新: 谢谢你们的帮助,但我没有解决我的问题,尽管我尝试了你所有的提示。现在我给你更详细的描述我想要实现的目标。

    使用 splitContainers 我可以实现我想要的,但前提是我拆分“根”面板。这是那个表格,你可以看到我在 spliter2.panel2 中滚动,我可以到达所有按钮(这正是我需要的):

但我需要添加此面板的表单如下所示:

表单添加“根”面板,“根”面板广告 3 个面板(两个黑色面板停靠在顶部和底部),第三个面板是我们所说的面板,它被停靠以填充。

现在,在我尝试减小表单大小的地方,我得到了这个:

现在我没有在 spliter2.panel2 中滚动,并且我的一些按钮消失了。我需要在 spliter2.panel2 中滚动,并且我需要滚动才能到达所有按钮。

有可能吗?怎么做?再次感谢大家...

更新 2: 我需要将相同的行为添加到另一种形式。主要差异(您可以在下图中看到)是停靠面板上的另一个水平拆分器(根面板添加了顶部、停靠和底部面板 >> 停靠面板添加了水平拆分器 >> dockPanelSplitter.Panel1 添加了我们所说的面板):

虽然我设置了 splitter3.Panel2 = true 的 AutoScroll 属性,但我还是没有滚动。

【问题讨论】:

如果您不喜欢停靠时“右上角”和“右下”面板的行为方式,那么您需要使用其他东西。在您的“右侧面板”中,添加一个 TableLayoutPanel 并将其设置为一列和两行。您将“右上角”和右下角面板添加到 TableLayoutPanel 中的行。现在您可以在 TableLayoutPanel 中控制两行的大小关系... 【参考方案1】:

使用 2 个SplitContainers,一个垂直,一个水平,第二个在第一个的 Panel2 内,然后像这样动态添加按钮(或通过 VS Designer):

    private void Form1_Load(object sender, EventArgs e)
    
        Button button = new Button();
        button.Text = "Button1";
        button.Location = new Point(0, 10);
        splitContainer2.Panel2.Controls.Add(button);

        button = new Button();
        button.Text = "Button2";
        button.Location = new Point(0, 50);
        splitContainer2.Panel2.Controls.Add(button);
    

结果:

编辑:为了在新场景中与其他面板一起使用滚动条,请执行以下操作:

    splitContainer2.Panel2.AutoScroll = true;

结果:

【讨论】:

另外,请尝试将 ToolStripContainer 与 toolStrips 中的按钮(ToolStripMenuItem 或 ToolStripButton)一起使用,而不是使用普通按钮 - 它们与 SplitContainers 结合使用效果很好! 拜托,你能检查我的问题更新。您的建议效果很好,但这并不能解决我的问题...提前谢谢您... 这样做:splitContainer2.Panel2.AutoScroll = true; 抱歉,我现在需要添加完全相同的行为,但场景略有不同。请检查更新。你能给我一些关于 Windows 窗体设计器的教程和资源的链接吗?只是为了避免我以后的问题:) 谢谢你所做的一切...... 随着拆分容器和面板数量的增加,很容易在其中迷失,将控件放置在错误的面板上,在错误的面板上启用自动滚动等。所以,请确保您重新清楚。还有一件事:即使您在正确的面板上将自动滚动设置为 true,滚动条也只会在必要时显示。至于教程,我没有最喜欢的。如果你用谷歌搜索,我相信有很多。

以上是关于如何在以下面板示例中使所有控件可见的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Delphi 的 OLE 自动化过程中使 Word 不可见

JS实现点击参数面板按钮显示或隐藏数据

如何检查该面板在 JavaScript 中是不是可见?

如何在 Jquery Mobile ListView 控件中使图像垂直居中?

WPF:确定面板是不是对用户可见

如何在发布版本中使标签不可见[关闭]