我们使用类似的模式。带有对象和任务菜单的 MDI 父级。每个对象/任务的 MDI 子表单(大约 30 个)。三组左侧“导航”按钮:1:1(调出l个相关对象)、1:N(显示相关对象列表-检查、设备等)、N:N:X(其他复杂关系或任务) . 正文有一个选项卡控件来分组数据。至少一个选项卡是用于 1:N 列表的 datagridview。
左侧导航按钮集取决于被管理的对象。我们动态添加按钮,但在大多数情况下它们是硬编码的——我们只是不使用工具箱将按钮放置在子窗体上。每个按钮集都在一个面板中 - 如果我要重新开始,我可能会使用 FlowPanel。
我们在其中一个更复杂的对象上构建“模型”表单,构建所有数据绑定逻辑,然后将该表单用作其他对象的基础。我们没有使用 Visual Studio/VB.Net 提供的继承。
我们进行自己的控制数据“绑定”。我们使用 ADO.Net 和 SQL Server。我们的子表单仅显示一条记录,并且不支持在向导生成的表单中看到的典型记录导航——这在我们的案例中工作正常,因为我们在数据中横向导航。例如,申请、建造授权、许可——然后是检查、更新等,所有这些都与一个设施有关。(我们是监管机构)
我们使用 VB.Net,因为很多业务逻辑都是在 VB6 中开发的。今天我仍然会使用 VB.Net 与 C# - 更容易用于业务逻辑和更易于维护的 IMO。
需要考虑的一个问题 - 有些人已经为 WinForms(和 VB.Net)提供了长刀。我看不到微软贬低 WinForms,但有些人提倡这一点。许多人无法欣赏 WinForms 的简单性(尽管灵活性有限),它使我们能够专注于正在完成的业务。我一直在看 WPF,但根本看不到它提供的所有 UI 功能的用处。WPF 支持者将推动 MVVM,但这只是小规模开发或生产(20 个用户使用桌面 oa LAN)环境不需要的复杂性。WPF 不会导致我们的横向导航。