【问题标题】:DockStyle Fill for RunTime Generated Controls运行时生成控件的 DockStyle 填充
【发布时间】:2012-03-24 10:56:57
【问题描述】:

我正在尝试做一些非常简单的事情,这给我在 C# Winforms 中带来了巨大的问题。我在 TabPage 上有两个组框。一个停靠在右侧,一个停靠在底部。我在页面上也有一个图表(System.Windows.Forms.DataVisualization.Charting)。此图表用于停靠。填充页面上的剩余空间。

我第一次遇到图表隐藏在两个组框后面并且仍然停靠填充整个页面的问题。但是,我发现我可以通过使用“BringToFront”(或重新排序文档大纲顺序)来解决这个问题,然后图表正确停靠并且不与页面上的任何其他控件重叠。

但是,我试图在运行时向页面添加图表,它再次填充整个页面并隐藏在其他控件后面。我怎样才能完成这项工作?

编辑: 忘了说,调用“BringToFront”会抛出异常“Width must be greater than 0px”。

chart_TapChart = new Chart();
chart_TapChart.Dock = DockStyle.Fill;
chart_TapChart.BringToFront();
GroupBox gp1 = new GroupBox();
gp1.Dock = DockStyle.Right;
GroupBox gp2 = new GroupBox();
gp2.Dock = DockStyle.Bottom;
this.Controls.Add(chart_TapChart);    <--this refers to tabpage
this.Controls.Add(gp1);
this.Controls.Add(gp2);

【问题讨论】:

标签: c# winforms controls dock


【解决方案1】:

事实证明,您必须等到已经查看了 TabPage(您必须以编程方式调用 yourtabpage.select()),然后搜索该标签页上的控件,找到图表,然后在其上调用“BringToFront” .您可以在将控件添加到页面之前设置 Dock.Fill。

在呈现标签页之前,您无法设置其 z-index。

【讨论】:

  • 刚刚遇到了类似的问题。在 TabPage 中以编程方式设置为 DockStyle.Fill 的面板不会按预期运行,除非在 TabPage 设置为 TabControl 上的 SelectedTab 属性之后设置 DockStyle。
【解决方案2】:

不要停靠它。改为锚定它:

Chart.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top;

编辑:

正如乔恩指出的那样:

Chart.BringToFront();
Chart.Dock = DockStyle.Fill;

应该允许文档与表单上的其他控件配合得很好。

【讨论】:

  • 我已经尝试过了,它并没有像我想要的那样填充空白。 Dock.Fill 会更理想。
  • Dock.Fill 将不起作用,因为它总是会填充其父容器并超出其他控件。将左侧、顶部、宽度和高度设置为您希望它使用的空间,然后锚定它。
  • Coltech - Dock.Fill 可以与停靠在顶部/底部/左侧/右侧的其他控件配合使用。 Z 顺序决定了它的工作方式。如果图表在顶部,它不会填满整个容器。
  • 约翰,我不知道!所以只需调用 Chart.BringToFront() 和 DockStyle.Fill 就可以了?
  • 我不想硬编码宽度和高度。页面的大小会改变,添加额外的代码来改变页面的大小对于我正在做的事情来说太过分了。 Dock.Fill 似乎是适合我情况的方法。不过还是谢谢你的回答。
【解决方案3】:

如果高度设置为零,图表控件也有类似的问题。错误消息是“高度必须大于 0px”。将停靠从 Fill 更改为 None 并设置锚属性而不是修复它。看起来像是图表控件中的一个错误,但事实证明很难找到更多信息...

【讨论】:

    【解决方案4】:

    我们也遇到了“高度必须大于 0px”的问题。事实证明,问题/解决方案是显示设置。将显示大小设置为大于 100% 会导致 DockStyle.Fill 某些元素填充整个可用空间,从而使图表在初始化时高度为 0px。设置锚点而不是使用填充解决了这个问题,但这确实是图表控件中的一个错误。

    【讨论】:

      【解决方案5】:

      我能够解决这个问题并通过将图表最小尺寸设置为 10,10 来保持我的码头设置为填充。

      【讨论】:

        【解决方案6】:

        将 Dockstyle 设置为 None 可以加载表单,但我确实需要为我的一些图表使用 Fill 停靠样式。我通过在设计器中设置 myChart.Dock = DockStyle.None,然后在代码中的 Form.Load 事件末尾设置 myChart.Dock = DockStyle.None 解决了这个问题。现在程序可以正常加载,并且图表大小正确。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-03
          • 2013-06-27
          • 2017-01-27
          • 2019-08-19
          • 1970-01-01
          相关资源
          最近更新 更多