【问题标题】:Which is smaller footprint in C#在 C# 中哪个占用空间更小
【发布时间】:2010-12-01 06:38:46
【问题描述】:

标签大小类似于没有文本但有边框且不可见的矩形(用于围绕控件但不包含控件的窗体上的可视矩形)或面板?

【问题讨论】:

  • 您是在创建 Web 应用程序还是桌面应用程序
  • 我不知道,但我想不出它会有什么不同的原因。 CLR 将管理比这些对象中的任何一个占用更多的内存,所以这听起来像是过早的优化。

标签: memory size label panel footprint


【解决方案1】:

您要使用的是 GroupBox。并不是说它真的很重要,很可能,但标签应该比面板便宜。

【讨论】:

  • 在这种情况下,它是一个带有 32 页的选项卡控件的表单。是的,它很大,但它是一种很少使用的表格,它必须包含所有 32 页。该矩形仅用于页面上控件的可见分隔。我现在有面板,当然,32 页加载速度很慢。我将尝试用标签替换面板,看看是否更好。不,无论全世界是否认为应该将其分解为多种形式,设计都不会改变:o)谢谢!
  • 这是一个糟糕的设计。老实说,任何选项卡控件都不应该有 32 页,它根本不可用。
  • 这不能回答问题。有时设计决策不是由开发人员做出的,您必须接受它。
【解决方案2】:

答案是;哪个占用空间更小并不重要,如果确实存在设计问题(即,您的表单上有太多方式控件)。无论如何,您应该只使用适合该工作的控件,在本例中为 Panel 或 GroupBox。

【讨论】:

    【解决方案3】:

    如果这确实是个问题,那么在控件之间提供视觉分隔的最佳方法是处理每个标签页的 Paint 事件,并使用 e.Graphics.FillRectangle(...) 来绘制分隔符。这样你就可以摆脱大量的控件了。

    如果你不能做一些简单的事情,比如在每个标签页上的每个控件下方绘制一个矩形,你可以编写一个代码生成例程,在表单上运行一次,然后为每个标签页生成一些东西像这样(通过遍历页面上的所有分隔符控件):

    List<Rectangle> rects = new List<Rectangle>();
    rects.Add(new Rectangle(10, 40, 200, 5)); // position of first separator
    rects.Add(new Rectangle(10, 80, 200, 5)); // position of second separator
    // etc.
    

    然后您将这些生成的代码例程复制并粘贴到您的应用程序中,并将它们用于每个页面的 Paint 事件,如下所示:

    SolidBrush brush = new SolidBrush(Color.PeachPuff);
    foreach (Rectangle rect in rects)
    {
        e.Graphics.FillRectangle(brush, rect);
    }
    

    然后从选项卡控件中删除所有分隔符。你最终应该得到一个 List&lt;Rectangle&gt; 类型的数组(每个页面一个列表),你实例化并填写表单的 Load 事件或其构造函数(使用生成的代码)。

    不过,我必须重申 Ed 所说的话。 .Net 表单上可以有很多控件,而不会出现任何实际问题,因此,如果您因为表单上的控件过多而遇到问题,最好重新设计整个控件.

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多