【问题标题】:SplitContainer that only resizes panel1仅调整 panel1 大小的 SplitContainer
【发布时间】:2010-08-13 18:45:32
【问题描述】:

有没有办法让 SplitContainer 只调整 panel1 的大小?我有一个 Vertical SplitContainer,当我移动拆分器时,我希望第一个面板的大小增加/减小,但我不想更改第二个面板的大小,而是希望表单的大小增加和减小。

我创建了一些代码来增加/减小表单的大小,但 Panel2 也在改变大小,因此整个面板并不总是可见。

我是否必须制作自己的容器,或者使用 SplitContainer 可以做到这一点?

我有一个表单“MainWin”,其中包含一个面板“MainPanel” MainPanel 包含 SplitContainer“MainSplitContainer”。 Panel1 包含一个 TreeView,而 Panel2 包含 3 个面板,这些面板根据在 TreeView 中选择的项目而变得可见。我希望这 3 个面板始终完全可见(我计划限制拆分器的扩展,因此表单不能扩展到屏幕之外),这是否可能,或者我应该创建自己的控件并使用调整大小MouseDown、MouseUp 和 MouseMove 事件?

【问题讨论】:

    标签: c# custom-controls splitcontainer


    【解决方案1】:

    无需创建自己的表单:SplitContainer 有一个属性:“FixedPanel” 选择 SplitContainer 并在 Layout 部分查看“FixedPanel”,将其设置为您希望在宽度或高度上保持不变的面板(取决于面板布局)。

    以编程方式:

    sc.FixedPanel = FixedPanel.Panel1; //Or Panel2
    

    见:

    Splitcontainer, Make a fixed panel

    Fixed Panel Height in a SplitContainer

    【讨论】:

    • 我想我试过这个,但它没有给我想要的结果。
    • 哦!我误读了这个问题:将您的 FixedPanel 设置为您不想更改的面板(这会在更改表单本身大小的同时修复面板),并将 IsSplitterFixed 设置为 False(让您可以选择更改面板宽度)。在构造时保存固定面板的宽度,然后每当 SplitterMoved 触发 if( . != ) 时,您可以根据非永久面板大小调整表单大小和固定面板的预期尺寸。最后再次移动分割器,这一次(因为你有 if)它不会再次调整它的大小。
    • 虽然自定义容器可能同样简单! ;)
    【解决方案2】:

    您不能在 SplitContainer 中设置面板的高度属性;但您可以捕获表单上的 Resize 事件并设置 splitterDistance。 SplitContainer 将为您调整另一个面板。这是我在下面的工作中的一段代码,它成功地强制 Panel1 在表单调整大小时保持相同的大小。希望这会有所帮助

    Private Sub frmApp_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 MyBase.Resize Me.SplitContainer1.SplitterDistance = 140 结束子

    【讨论】:

    • 反面提出的问题:当 SPLITTER 移动时,表单应该调整大小...
    【解决方案3】:

    我最终创建了自己的控件。

    【讨论】:

    • 这是无用的答案 - 没有细节,没有解释
    • 好吧,不是完全没用。它给了我信息,我无法使用 SplitContainer 获得我想要的结果。 “使用 FixedPanel”是错误的答案。
    猜你喜欢
    • 2014-07-23
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多