在VB6中调整窗口大小时居中元素

时间:2011-03-03 20:26:30

标签: visual-studio vb6 maximize

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

  • _real_方式,编写动态代码,将表单上的每个元素放在与其他元素相关的位置,这样无论它的大小如何,它们都会始终正确地重新定位。
  • 更简单但更干净的方式,将所有元素放在1024x768 PictureBox中,只要调整窗体大小,就将其放在屏幕上。

我不喜欢第一个,因为呃,我不喜欢第二个,因为它是一个特殊的解决方案。此外,虽然我更喜欢第一个背后的想法,但它有永久性问题:如果我需要返回并更改一些元素,那么我就会重写大量的重新定位代码。而第二个问题有一个类似的问题,我将失去VB6提供的一个好东西:能够看到表单的网格结构。

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

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

谢谢大家!

3 个答案:

答案 0 :(得分:3)

没有免费的午餐。如果您希望VB6应用程序在调整大小时“看起来不错”,则Form_Resize事件中编写动态大小调整逻辑。否则,正如其他人所说,你会有大的灰色区域,左上角塞满了所有东西。以PictureBox为中心并不是更好。无论哪种方式,它看起来都是非标准的和业余的。

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

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

“Anchor”类型属性使得VB.NET中不需要这种类型的代码。如果你想到这一点,你会发现,如果一些属性可以处理这个逻辑,那么执行相同操作所需的代码行不会那么复杂。一旦您确定了第一个控件的位置和大小,您就可以将其他控件位置置于该控件的顶部,左侧,宽度和高度之外,然后沿着该表单移动。

当你做对了,我想你会发现它确实值得努力。

答案 1 :(得分:2)

如果元素相对于彼此改变大小或位置,我可能会采用PictureBox方法。我不明白这会是多么糟糕。

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

答案 2 :(得分:1)

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

查看Control Containers。正如我在评论中指出的那样,您所描述的第二种解决方案并非临时性 - 它是有组织的。 UI完全是关于容器的。

尽管如此,你对PictureBox的感觉还不错。