5 usability user-interface combobox winforms
直到今天,我才意识到列表框(如 HTML 表单控件下拉选择框)和“组合框”之间存在区别,“组合框”是列表框和文本输入控件的组合。因此 ComboBox 允许用户输入一个新值,如果编程为这样做,则会将该值附加到单击时显示的值列表中。
刚刚读了几本关于界面设计的书,我认为虽然这个概念听起来很酷,并且最终会让我不必制作另一个界面来“添加”选择,但我觉得它可能会让不太先进的用户感到困惑可能会错过您可以通过这种方式输入值的事实。
有没有人对组合框的使用及其优点/缺点与良好的 UI 设计原则有任何意见?我的应用程序应该被所有年龄段的许多人使用。
马特,这里有一些可能对您有用的细节,如果您继续的话。
我已经按照您提到的方式在表单上的几个地方使用了组合框。
除了添加功能之外,您还可以向用户提供编辑和删除选项,用户可以在其中编辑/重命名和删除组合条目。但是,在提供此功能时,您需要非常小心选择的索引,因为它可能会变得非常混乱。
就我而言,我有以下三项来处理上述所有功能:
功能如下:
在组合框中,除了用户已保存的项目之外,我在顶部还有一个项目--New-- 。当用户必须编辑/重命名某个项目时,他应该从组合中选择该项目,在组合中键入新名称,然后单击“保存”。如果用户想要添加新项目,他应该从组合中选择--New--,在组合中输入名称(这将覆盖--New--),然后单击保存如果用户需要删除项目,他应该简单地选择该项目并单击“删除”
我已经实现了SelectionChangeCommited事件而不是SelectedIndexChanged,因为如果通过代码设置所选索引,则后者会触发事件,而前者仅当用户从屏幕上选择组合框中的项目时才会触发事件。
此外,我还维护了一个名为_selectedComboID的表单级变量,它存储当前选定的组合项的 ID。它在 SelectionChangeCommited 事件处理程序中设置。这是因为,如果您必须重命名组合中的条目,您将首先选择它。那时 selectedIndex 是正确的(您选择的索引)。然后,由于您需要重命名它,因此您将编辑组合文本并单击“保存”。但是,由于您已经编辑了名称,它现在与所选索引混淆了。因此,当用户做出选择时,我事先将其保存在变量中。
在 Save 方法中,我检查了 _selectedComboID 是否与 --New-- 的 ID 相同。如果是,则触发插入代码,否则触发编辑代码。在这两种情况下,除了其他验证之外,您还需要检查用户选择的名称是否已存在。
如果您为组合框设置Sorted = true,则在整个代码中使用 SelectedItem 而不是 SelectedValue 非常重要。这是因为当您将组合框的排序设置为 true 时,它会弄乱所选值。您可以参考我的文章《在列表框中设置所选项目而不循环》 以获取详细信息。
哇,那太大了!希望能帮助到你 :)