【发布时间】:2008-11-06 22:16:58
【问题描述】:
所以,我在 VB 中有一个表单,它是可见的,除非程序以静默方式启动,在这种情况下,表单仍会加载,但交互是以编程方式完成的。但是,在极少数情况下,我希望在不可见表单中创建的表单是可见的。什么是最好的方法来实现这一点,理想情况下不创建新的形式。我提出了一些想法,但真的不喜欢:
- 创建一个新表单,传递该表单的 hwnd 以便它托管任何适用的窗口。真的很容易做到,可能相当灵活。还是很丑。
- 手动调用可见表单,提取值,将用户填写的数据传递给不可见表单。这个解决方案可能是最简单的,但它也是一个 hack。如果它用于少数表单,这是一个糟糕的解决方案,但它可能会。
- 创建一个新类,重构由事件触发的表单。
- 将主窗体设置为可见,但扭曲其加载功能,使其实际上不显示任何内容。
根本不使用不可见的表单,重构代码以更好地将表单的功能与使用分开。事实上,这在很大程度上已经是正确的,但我没有看到一种方法可以完全做到这一点,而不需要对类的使用方式进行一些重复,因为我最终需要使用包含相同功能的不同类。不过,这可能是理想主义的解决方案。
我实际上最终做了什么:在受影响的地方粘贴一个 shell 执行调用,它启动了一个用不同标志编译的程序副本的新实例。这并不像听起来那么糟糕。使用任何其他解决方案的部分问题是,任何时候我想在我的代码上使用不同的 UI,我都需要创建一个新的控制器类来以不同的方式处理相关事件。该程序的大部分界面已经与其实现分开,但是创建一个新的 UI 需要我添加额外的事件处理程序等等。诚然,它可能只需要大约 3 个事件处理程序来处理在触发事件时提示用户输入。
编辑:在某种程度上,我误解了我的问题:问题是我想回收部分现有 UI,但不是全部。因此,使我不希望用户看到的部分不可见,但使菜单看起来可见。解耦各个 UI 组件可能最终会增加程序的复杂性。
【问题讨论】:
标签: user-interface forms vb6