1

我正在 VB6 中构建一个标准表单大小为 1024x768 的应用程序,以便可以看到它的旧显示器。然而,一些用户将有更高的分辨率可用,我希望程序在他们最大化屏幕时仍然看起来不错。我根本不想调整表单上元素的大小,但我希望重新定位所有内容。我看到有两种选择,我不太喜欢任何一种:

  • _real_ 方式,编写动态代码,将表单上的每个元素相对于其他元素放置,这样无论它的大小如何,它们总是会正确地重新定位。
  • 更简单但更有趣的方法是将所有元素放在 1024x768 PictureBox 中,并在调整表单大小时将其置于屏幕中心。

我不喜欢第一个,因为呃,我不喜欢第二个,因为它是一个临时解决方案。此外,虽然我更喜欢第一个背后的想法,但它存在持久性问题:如果我需要返回并更改某些元素,那么我就会陷入重写大量重新定位代码的困境。第二个有一个类似的问题,我会失去 VB6 确实提供的好处之一:能够看到表单的网格结构。

有人知道任何神奇的解决方案吗?

我目前倾向于 PictureBox,只是因为编写并且无疑重写所有定位代码的前景令人沮丧。这里的问题是我已经在表单上有这 50 多个元素,但我需要它们在 PictureBox 中。我可以复制和粘贴而不创建它似乎总是想要制作的数组,但是我必须重新命名它们......所以我的第二个问题是,有没有简单的方法来转移一个预先存在的元素形成一个图片框?

谢谢大家!

4

3 回答 3

3

天下没有免费的午餐。如果您希望 VB6 应用程序在调整大小时“看起来不错”,则必须Form_Resize事件中编写动态调整大小逻辑。否则,正如其他人所说,您将有很大的灰色区域,所有东西都挤在左上角。以 aPictureBox为中心也好不到哪里去。无论哪种方式,它都会看起来不标准和业余。

我已经为几个 VB6 应用程序编写了这种类型的代码。我同意写起来有点累,但并不难。你只需要考虑:

  • 按钮定位 - 表单的右下角坐标会发生变化,按钮通常沿右侧放置,或相对于右下角放置。
  • 显示控件调整大小 - 您可以加宽列表框、多行文本框、下拉列表等。您的代码可以决定这些是否应该是表单新宽度/高度的百分比,或者应该扩展以填充放置所有内容后留下的内容别的。我认为后一种方法效果更好,但这取决于应用程序。
  • 控件与窗体边缘之间的边距,以及控件本身之间的边距。我定义了一个名为“Gutter”的值来保存该值,然后在定位时根据需要应用它,例如,相对于右下角水平放置一系列按钮。
  • 不要调整按钮或标签的大小,只需重新定位它们。
  • 不要调整字体大小。

“锚”类型属性使这种类型的代码在 VB.NET 中是不必要的。如果您考虑一下,您会发现如果一些属性可以处理此逻辑,那么执行相同操作所需的代码行就不会那么复杂。一旦您定位并调整了第一个控件的大小,您就可以将其他控件的位置定位在该控件的顶部、左侧、宽度和高度之外,然后在表单中走动。

当你做对了,我想你会发现它实际上是值得的。

于 2011-03-04T15:31:03.537 回答
2

如果元素不会改变彼此之间的大小或位置,我可能会采用这种PictureBox方法。我不明白那真的会很糟糕。

如果控件需要调整大小或重新定位,我会(天知道我曾经)编写大量调整大小的代码......

于 2011-03-03T20:32:43.313 回答
1

http://www.functionx.com/vbnet/Lesson08.htm

查看控制容器。正如我在评论中指出的,您描述的第二个解决方案不是临时的 - 它是有组织的。UI 都是关于容器的。

不过,您对 PictureBox 感到恶心是对的。

于 2011-03-03T20:36:06.200 回答