2010-02-03 100 views
3

我有一個文件,其中存儲了枚舉列表及其關聯的值。下面是一個說明什麼文件看起來像(而不是其實際內容):用於雙向枚舉枚舉的用戶界面設計

Enumerated value  Meaning (associated text) 
0      Sunday 
1      Monday 
2      Tuesday 
3      Wednesday 
4      Thursday 
5      Friday 
6      Saturday 

我寫一個C#程序,以允許用戶查找枚舉值及其相關文本之間。換句話說,他們應該能夠從一個值中查找文本,反之亦然。

我想知道什麼是設計用戶界面的最佳方式?我有幾個想法:

  1. 有兩個文本框。用戶可以填寫他們中的任何一個,而另一個可以在用戶輸入時自動填充。如果該值無效,則將其他文本框留空。
  2. 有用戶填寫的,他們擁有的信息,一個單選按鈕,指定他們填寫什麼樣的信息在文本框邊的文本框,一個OK按鈕按下時,更新與文本標籤結果或錯誤消息。
  3. 與2相同,但沒有確定按鈕。只需在用戶輸入時更新文本標籤(即處理Control.KeyPress事件)。
  4. 具有兩個單獨的屏幕(一個來搜索從文本枚舉,其它搜索從枚舉文本),並且用戶可以通過一個標籤或按鈕在它們之間翻轉。有一個用於用戶輸入的文本框,一個OK按鈕和一個文本標籤以顯示結果或錯誤消息。
  5. 在同一屏幕上有兩個單獨的區域。每個區域都有相同的格式,在4

我以爲2是什麼,我會期望從一個GUI應用程序,儘管它可能是有點慢,並沒有什麼顯示,如果用戶只需鍵入一個問題「S」並按下確定。選項1較爲混亂,但可能更具交互性(更快地顯示答案)。

很抱歉,如果這不是嚴格意義上的編程問題,但我認爲這是一個UI設計問題,其出現往往不夠。有誰知道任何行業標準的最佳實踐嗎?

非常感謝。

回答

2

您預計在列表中有多少項?如果這個數字相當小,也許是< 100,我實際上採用了Tufte方法,並排顯示兩個精心設計的表格(一個按值排序,另一個按含義排序)。眼睛/大腦連接可以比我們意識到的更快地解析數據;我認爲Tufte聲稱每隻眼睛能夠達到〜10Mbit /秒。

如果你有很多不同類型的數據,不過,我覺得#1是最好的選擇。最少數量的表單控件,並且您可以快速通過AJAX或內聯數組檢索數據。確保您的教學文本清晰簡明。

唯一的缺點我看到這種方法,它可以防止用戶看到相關的數據集,並建立自己的模式。例如,如果你告訴我0 =星期日,1 =星期一,我可以合理地假設2 =星期二。如果用戶瞭解該模式,我寧願看到他們使用它,而不必爲每個單獨的值使用表單。

+0

謝謝您的回覆。我正在談論大約200個枚舉字段,每個枚舉字段有幾個到500個項目。枚舉列表中的項目不是邏輯組織的。這個例子只是爲了說明的目的! – Andy 2010-02-03 16:23:18

+0

然後它聽起來像你想要馬克的第二段(和你的#1),至少對於有100多種可能性的領域。特別是你有200雙。房地產必須是一個嚴重的問題,你會希望儘可能少的控制。我只補充一點,你提供了一些反饋(不僅僅是空白框),用於無效輸入(例如文本框下的文本「不匹配」)。您可能還需要一個小按鈕來打開窗口或頁面,以便在用戶不知道時查找值(我假設用戶通常會這樣做)。 – 2010-02-03 21:59:29

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; 
    } 

還是我誤解了這個問題。

+0

恐怕你誤解了這個問題。我真的在尋求如何設計用戶界面的建議和建議。該示例文件也用於說明目的 - 真正的文件是一個XML文件,這是很難讀的,我們不需要很多信息)。在這種情況下,設計當然需要在代碼之前! – Andy 2010-02-09 10:02:31

1

我覺得你變體的方式太複雜了。如果沒有必要瀏覽枚舉,我認爲最好的基於鍵盤的界面應該只有一個帶有自動完成功能的文本字段和一個旁邊(下方)的標籤來顯示結果。

當用戶類型,在這兩個值和文本的程序搜索,並提出建議,爲部分匹配。 只要匹配(完整或部分),就會顯示其對應部分。因此,如果匹配是一個值,則顯示相應的文本,反之亦然。

或者更簡單,只顯示匹配值文本作爲對用戶類型,每個類型的字符增量更新的列表。無需按Enter鍵。

+1

+1我喜歡這個答案(除了很難區分價值和文字的情況除外)。甚至沒有必要將完全匹配的部分匹配「建議」加以區分 - 您可以只顯示多個部分匹配的匹配對,直到有一個明確的匹配。 – 2010-02-03 20:59:54

+0

我同意你的意見,並且我已經在第一個窗口的設計中調整了你的建議。 – Andy 2010-02-09 10:04:02

1

我用像#1一次的溶液。它是確保您始終保持各個框同步的重要組成部分,或者用戶可能會錯誤地將舊值視爲有效的翻譯。在我的情況下,只要用戶開始打字(甚至粘貼),我就立即清空了另一個文本框。

這也取決於使用的類型 - 將它的用戶經常使用這種東西,可以讓一些學習曲線,如果將最大限度地減少擊鍵,或一些特定的用戶很少會遇到?

0

非常感謝你對你的答案。在考慮了所有的輸入之後,我提出了一個接口提議。

  • 在程序開始時,所有列舉的領域,他們的場數,以及它們的枚舉值的列表將被載入。
  • 初始界面將包含一個TextBox和一個ListBox。最初,ListBox將顯示所有枚舉字段。當用戶鍵入文本框時,不匹配的項目(字段名或字段號)將從列表框中刪除。
  • 通過雙擊ListBox上的項目(即枚舉字段),或者通過選擇它然後按ENTER鍵,會顯示一個新窗口。
  • 新窗口將在具有兩列的表格中顯示所有枚舉值及其關聯文本(用於在第一個窗口中選擇的枚舉字段)。
  • 該列表可通過單擊列進行排序。用戶還應該能夠使用Ctrl-F來搜索列表(希望這可以在C#應用程序中使用)。

爲了簡化界面(只有一個文本框和列表框)並使其易於使用,我爲初始窗口做了選擇。另外,我認爲一起顯示枚舉值並允許用戶按照他/她喜歡的方式玩這些信息,這遠遠優於將所有內容都隱藏在精細的界面之後。

您對接口設計的反饋將不勝感激。

PS目前,用戶必須去網站,找到最新版本的XML文檔,下載它,打開它,然後搜索XML以找到他們正在尋找的字段,然後找到他們需要的值。我的應用程序應該極大地簡化它們。