我们使用类似的模式。 MDI父对象和任务的菜单。每个对象/任务的MDI子表单(约30个)。 N:N:X(其他复杂的关系或任务)1:1(调用l个相关对象),1:N(相关对象的显示列表 - 检查,设备等) 。正文有一个选项卡控件来分组数据。至少有一个选项卡是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台桌面或局域网用户)环境。 WPF不会导致我们横向导航。
我最终在splitpanel的右侧使用了一个带有流程面板的垂直分隔面板,所以如果用户调整窗口大小,控件会自动定位。有一个MDI选择屏幕可以选择整个应用程序,并且splitpanel是针对该应用程序的。 – SDanks