2013-10-23 94 views
0

我正在使用Winforms客户端服务器应用程序,该应用程序将加载用于输入数据或检索数据或搜索数据的多种表单之一。我想在屏幕的左侧放置按钮,选择右侧加载哪种形式,以及顶部用于常见的新建,打开,删除等按钮。Winforms设计建议

我开始通过制作MDI表单将弹出一个子窗口,允许用户选择他们想要使用的应用程序。然后,当他们选择它时,它会在右侧加载适当的表单并更新左侧按钮的文本和功能。我正在使用面板将表单加载到按钮窗体(我称之为导航器)和应用程序窗体中。当右侧的表单发生变化时,我不得不使用事件来更改不同的按钮表单。我的一位朋友说我可能以错误的方式来解决这个问题。他说,可能有更好的设计模式或方法或控制已经为我做。

我不知道如何在网络上搜索这样的东西。

有人能给我这个方向吗? 如果我指出正确的方向,我可以进行研究。 也许有一个控件已经做到了这一切? 谢谢。

+0

我最终在splitpanel的右侧使用了一个带有流程面板的垂直分隔面板,所以如果用户调整窗口大小,控件会自动定位。有一个MDI选择屏幕可以选择整个应用程序,并且splitpanel是针对该应用程序的。 – SDanks

回答

0

我们使用类似的模式。 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不会导致我们横向导航。

+0

我恭敬地不同意你在这里所说的一切。 'C#'比VB.Net简洁得多,它的语法更具可读性。 WPF并没有增加任何“额外的复杂性”,它通过允许DataBinding而不是可怕的蹩脚的太多代码为任何事情的Winforms代码的方式来简化开发过程。 WPF视图大多数情况下根本没有代码,它们直接绑定到业务对象或ViewModel以提供表示逻辑。 –

+0

我恭敬地同意你在这里评论的大部分内容。在我的现实世界里,这不会改变一件事。我不能折腾近100个表格和数以千计的代码行,以追逐最新的MS工具。我在WPF + EF中创建了一些较小的支持应用程序(使用VB.Net,对不起),并且它对于简单的数据库工作得很好。顺便说一下,你说C#更具可读性,从而损害了你的可信度。简洁,也许如果你是构建工具。至于OP,很大程度上取决于他们已经在使用什么,他们在哪里以及规模。我刚刚发布了我们所做的并描述了环境。 – rheitzman

+0

没关系,如果你不想抛弃现有的工作,但是WPF“增加了更多的复杂性”完全是不真实的。另外,如果你客观[比较C#和VB.Net](http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET),你会很快意识到VB.Net意味着“更多文本”,因为它缺少并且引入了'End ...'语法(例如'End If','End For')等。另外,VB.Net lambda表达式语法真的很复杂,相反,到C#的简单'()=>'或'x => x ...' –

0

我认为用于选择表单的左侧工具栏是一个很好的模式,但可以折叠(隐藏),以便用户可以使用所有桌面空间。

至于MDI个人我不喜欢它,因为跌倒了一点过时和混乱。但是再次寻求形式和功能的平衡。

对于顶部的工具栏,我将它作为每个窗体的一部分,这样可以很容易地对逻辑进行编程。这是一种不需要的复杂功能,将它们放在主表单上。

作为一个推荐,你可以看看,Designing Web Interfaces即使它更专注于网络可以给用户交互中的一些指针。

更多信息搜索UI模式用户交互设计