我有一个文件,用于存储枚举列表及其关联值。以下是文件的外观(而不是实际内容):
Enumerated value Meaning (associated text)
0 Sunday
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
我正在编写一个C#程序,允许用户在枚举值及其相关文本之间查找。换句话说,他们应该能够从值中查找文本,反之亦然。
我想知道设计用户界面的最佳方法是什么?我有几个想法:
我认为2是我对GUI应用程序的期望,虽然它可能有点慢但是如果用户只键入“S”并按下OK则会出现什么问题。选项1更加混乱,但可能更具互动性(更快地显示答案)。
很抱歉,如果这不是一个严格的编程问题,但我认为这是一个经常出现的UI设计问题。有人知道任何行业标准的最佳做法吗?
非常感谢。
答案 0 :(得分:2)
您预计列表中有多少项?如果它是一个相当小的数字,可能< 100,我实际上采用Tufte方法并且只是并排显示两个精心设计的表(一个按值排序,另一个按意义排序)。眼/脑连接可以比我们意识到的更快地解析数据;我认为Tufte声称每只眼睛能够达到~10Mbit /秒。
如果你有很多不同类型的数据,我认为#1是你最好的选择。最少数量的表单控件,您可以快速通过AJAX或内联数组检索数据。确保您的教学文本完全清晰简洁。
我认为这种方法的唯一缺点是它会阻止用户查看相关数据集并自行建立模式。例如,如果你告诉我0 =星期日和1 =星期一,我可以合理地假设2 =星期二。如果用户理解模式,我宁愿看到他们使用它,而不是必须为每个单独的值使用表单。
答案 1 :(得分:1)
我认为你的变种太复杂了。如果不需要浏览枚举,我认为最好的基于键盘的界面只有一个带有自动完成功能的文本字段和旁边(下方)的标签来显示结果。
当用户输入时,程序会搜索两个值和文本,并将部分匹配作为建议。 只要匹配(完整或甚至部分),就会显示其对应部分。因此,如果匹配值,则显示相应的文本,反之亦然。
甚至更简单,只需在用户输入时显示匹配的值 - 文本对列表,并使用每个键入的字符逐步更新。无需按Enter键。
答案 2 :(得分:1)
我曾经使用像#1这样的解决方案。它的重要部分是确保您始终保持框同步,或者用户可能误读旧值作为有效翻译。在我的情况下,一旦用户开始输入(或甚至粘贴)其中一个,我就清除了另一个盒子。
它还取决于使用的类型 - 这是用户经常使用的东西,如果能够最大限度地减少击键次数,或者给定用户很少会遇到的东西,可以允许一些学习曲线吗?
答案 3 :(得分:0)
假设您有枚举设置类似
public enum Days { Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6 };
难道你不能只使用几种辅助方法吗?
public static int GetEnumValue(string name, Type enumType)
{
int result = -1;
foreach (var item in Enum.GetValues(enumType))
{
if (item.ToString() == name)
{
result = (int) item;
break;
}
}
return result;
}
public static string GetEnumValue(int value, Type enumType)
{
string result = null;
foreach (var item in Enum.GetValues(enumType))
{
if ((int)item == value)
{
result = item.ToString();
break;
}
}
return result;
}
或者我误解了这个问题。
答案 4 :(得分:0)
非常感谢您的回答。在考虑了所有输入后,我提出了接口的建议。
我为初始窗口做了选择,以简化界面(只有1个文本框和列表框)并使其易于使用。此外,我认为将枚举值一起显示并允许用户按照他/她喜欢的方式播放信息,这比将所有内容隐藏在精心设计的界面后要好得多。
非常感谢您对界面设计的反馈。
PS目前,用户必须访问网站,找到最新版本的xml文档,下载,打开它,然后搜索XML以查找他们正在查找的字段,然后查找所需的值。我的应用程序应该极其简化它们。