使用拆分容器调整表单大小时的问题

Posted

技术标签:

【中文标题】使用拆分容器调整表单大小时的问题【英文标题】:Problems when resizing a form with a splitcontainer 【发布时间】:2019-09-20 11:16:36 【问题描述】:

Visual Studio 2019、Windows 窗体和 VB。 我有一个带有拆分容器的表单,其中一个面板中填充了richtextbox,另一个面板中填充了第三方控件(txtextcontrol:可以更好地处理表格的richtextbox替代品)来显示教科书和笔记。我正在手动处理所有调整大小,因为我无法获得各种停靠和锚定选项来调整大小并将所有内容放置在我想要的位置,而且我可以获得比停靠时更快、更流畅的滚动。当我使用两个富文本框时,这一切都很完美。但我有一些表格显示不正确。

恐怕 txtextcontrol 是罪魁祸首,但他们的网站提供的文档很少,也没有技术支持,除非你花大价钱。而且我不太确定这可能是什么原因,所以我会在这里询问您是否有任何想法。

问题是,当我通过拖动 Form1 边框或通过最大化或规范化表单来调整大小时,txtextcontrol 无法正确更新自身,但这可能部分是更基本的问题 splitcontainer 的副作用拒绝改变它的宽度。 在 Form1_SizeChanged 事件中,我有以下几行:

SplitContainer1.Width = Me.Width - 32

SplitContainer1.Height = Me.Height - FlowLayoutPanel1.Height - 46

SplitContainer1.Top = FlowLayoutPanel1.Height 
'there's a row of floating buttons above the two panels

宽度没有变化,但高度和顶部会改变。

如果我在子程序结束时重复宽度命令,有时它会在该点工作,而其他时候程序会崩溃并显示错误消息:“在枚举数被实例化后,集合已被修改”并试图捕获错误使用 Try...Catch 并不能防止崩溃。我认为当调用 splitcontainer.moved 事件然后触发尝试更改 splitcontainer 的调整大小事件时,有时会触发错误,但这似乎并不是一直以来的解释。而且我无法理解为什么高度会改变但宽度不会改变(没有停靠,也没有涉及锚点)

如果我手动移动分离器,它最终可能会解决问题; (我第一次移动它时,txtcontrol 的大小是正确的,但它仍然位于一个太窄的面板中,无法显示所有内容。第二次移动拆分器时,面板宽度也得到了纠正,一切都很好,直到下一次调整大小)。

谁能弄清楚发生了什么并告诉我如何解决这个问题? txtextcontrol 的 dll 是否有任何理由阻止调整其所在面板的大小(但为什么它只会影响宽度?),或者这只是分散了我面对的巨大明显错误的注意力而我就是没看到?

【问题讨论】:

如果没有阅读您的整个问题,听起来您可能根本不应该使用代码。您是否考虑过设置控件的Anchor 属性以使其自动调整大小? 【参考方案1】:

选择您的SplitContainer,在属性中找到Anchor,然后将其设置为所有方向:上、左、右和下。

或者以编程方式,在Form1_Load 中添加:

SplitContainer1.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or AnchorStyles.Right Or AnchorStyles.Bottom

不要混淆,Or 是一个操作符,在此处的作用类似于位操作符,可以一次设置所有 AnchorStyles 标志。

【讨论】:

以上是关于使用拆分容器调整表单大小时的问题的主要内容,如果未能解决你的问题,请参考以下文章

Select2 字段宽度难以调整大小

C#:锚定面板不会正确调整大小

如何动态调整拆分或表格视图控制器的大小?

根据图像的宽度自动调整 div 的各个部分的大小?

动态调整 pixi 舞台的大小及其在窗口调整大小和窗口加载时的内容

调整大小时的 SwiftUI 文本剪辑