【问题标题】:Is it possible for WinForm controls (Panel,etc.) to grow like a webform control?WinForm 控件(Panel 等)是否可以像 webform 控件一样增长?
【发布时间】:2011-03-22 17:31:15
【问题描述】:

我正在将应用程序从 ASP.NET WebForms 转换为 WinForms。有一个 asp.net 页面包含一个 ListView/Repeater,其中包含几个自定义控件,这些控件又包含一个带有其他自定义控件的 ListView。基本上布局看起来像一个 TreeView,但在每个节点/叶子上都有很少的控件,如组合框等。

当这是在 ASP.NET 中时,页面会自动布局,因此它有几个屏幕高 - 如果我在面板中添加 20 个按钮,它会增长并且浏览器将获得滚动条。

我想在 WinForms 应用程序中做同样的事情 - 所以我将有一个用户控件,它将在面板的某些变体(流、表格布局)中包含许多控件,并且这些控件可能具有它们内部的另一个控件,等等。

问题是,当我制作 winforms 应用程序时,每个控件在设计时都有特定的高度。我希望一些用户控件能够随着他们的内容而增长——所以他们会加起来。在主窗体中,应该有一个垂直滚动条,就像在 Web 浏览器中生成的页面高于屏幕一样。

我只是想获得一些正确方向的一般指示。谢谢。

【问题讨论】:

  • 我记得 MS Access 中有一个名为 CanGrow 的报告文本框属性。如果渲染的文本多于框中的内容,它可能会变大并将其余部分向下移动。控件能够随着其内容而增长。从您接受的答案来看,您希望控件在调整其父控件大小时自动调整大小。

标签: winforms layout scroll panel


【解决方案1】:

使用AnchorDock 容器属性。

【讨论】:

    【解决方案2】:

    是的,要详细说明 Anchor 和 Dock...试试这个

    -在空窗体上放置一个面板,并将其停靠属性设置为顶部

    -在面板中放置一个文本框,并将其停靠到 Full...它应该填满整个顶部面板

    -在表单上放置一个拆分器,如果还没有正确停靠,则将其停靠设置为顶部

    -在拆分器下方放置另一个面板,并将其 Dock 设置为 Fill

    -在下面板中放置另一个文本框并填充它

    现在您有一个带有两个可调整文本框的表单,并且会在表单出现时调整大小。

    *您可能需要将文本框的 MultiLine 属性设置为 true 但不确定。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      将控件锚定到父级。锚定所有四个边会使其拉伸。

      【讨论】:

      • 当用户调整它的大小而不是列表控件的内容时它会拉伸
      【解决方案4】:

      如果锚定和对接答案不适合您,还有另一种选择。它并不漂亮,但您可以访问控件的属性并在运行时动态更改它们。你会做类似的事情:if(listBox.Items.Count > [yourVal]) listBox.height = [yourFormula] 或其他东西。

      我已经有一段时间没有完成 Win Form(我的 IDE 目前还没有启动),但我很确定你甚至可以在你的 ScrollPanel 或其他滚动控件上设置表格。

      也就是说,当您使用 WinForms 时,您可以让用户做的滚动越少越好。

      【讨论】:

        猜你喜欢
        • 2015-04-29
        • 1970-01-01
        • 2011-06-12
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        相关资源
        最近更新 更多