2015-06-06 416 views
1

好吧,所以我有兩個組合框,其中一個填充了修飾符(ctrl,alt,shift,windows鍵),另一個帶有鍵(A-Z,F1-F12)。 我想將這些組合框的默認值更改爲保存在「Properties.Settings.Default。*」中的默認值,只是以某種方式它不起作用。winforms動態組合框的默認值

這裏是填充組合框代碼:

private void Settings_Load(object sender, EventArgs e) 
{ 
    KeyModifiers[] modifierArray = new KeyModifiers[] { KeyModifiers.Alt, KeyModifiers.Control, 
                 KeyModifiers.Shift, KeyModifiers.Windows }; 

    var dataSourceModifiers = new List<KeyModifiers>(); 

    foreach(KeyModifiers modifier in modifierArray) 
    { 
     dataSourceModifiers.Add(modifier); 
    } 

    this.comboboxClickerModifier.DataSource = dataSourceModifiers; 

    Keys[] keysArray = new Keys[] { Keys.A, Keys.B, Keys.C, Keys.D, Keys.E, Keys.F, Keys.G, Keys.H, Keys.I, Keys.J, Keys.K, 
            Keys.L, Keys.M, Keys.N, Keys.O, Keys.P, Keys.Q, Keys.R, Keys.S, Keys.T, Keys.U, Keys.V, 
            Keys.W, Keys.X, Keys.Y, Keys.Z, Keys.F1, Keys.F2, Keys.F1, Keys.F2, Keys.F3, Keys.F4, Keys.F5, 
            Keys.F6, Keys.F7, Keys.F8, Keys.F9, Keys.F10, Keys.F11, Keys.F12}; 

    var dataSourceKeys = new List<Keys>(); 

    foreach (Keys key in keysArray) 
    { 
     dataSourceKeys.Add(key); 
    } 

    this.comboboxClickerKey.DataSource = dataSourceKeys; 

    // Down here are the ways I tried to set the default value 
    comboboxClickerKey.Text = Properties.Settings.Default.Key.ToString(); 
    comboboxClickerKey.SelectedIndex = comboboxClickerKey.Items.IndexOf(Properties.Settings.Default.Key); 
    comboboxClickerKey.SelectedItem = Properties.Settings.Default.Key; 
    comboboxClickerModifier.SelectedItem = Properties.Settings.Default.Modifier; 
} 

在你可以看到我試圖設置默認值的方法的代碼的底部,但都未能如願。

設置: http://puu.sh/if5aJ.png

上的窗口啓動: http://puu.sh/if5jW.png

+0

Atleast for'Keys'選項'SelectedItem'看起來工作正常。在從設置中分配值之前可能會發生一些異常,請查看[關於'Load'事件中的異常](http://stackoverflow.com/questions/3209706/why-the-form-load-cant-catch-exception) – Fabio

+0

或者檢查設置的值是否與預期的相同 – Fabio

回答

1

我建議在剛選擇的對應ComboBox控制,像例如指數Properties.Settings.Default.IndexModifierProperties.Settings.Default.IndexKey(類型int)來存儲:

Properties.Settings.Default.IndexKey=comboboxClickerKey.SelectedIndex; 
Properties.Settings.Default.Save(); 

並分別操作wi個索引值強制回ComboBox控制以顯示相應的項目,如:

comboboxClickerKey.SelectedIndex=Properties.Settings.Default.IndexKey

的代碼將是更乾淨,不包括衆多類型轉換。另外,這裏是描述各種ComboBox數據綁定技術的文章的鏈接(與ASP.NET相關的示例也可以很容易地適用於WinForms應用):http://www.codeproject.com/Tips/214418/Binding-DropDownList-to-various-data-structures

:關於您的代碼段,最接近工作的解決方案是該行:

comboboxClickerKey.Text = Properties.Settings.Default.Key.ToString(); 

下一個3線不看的權利,最有可能會導致異常。如果你沒有明確地綁定DataTextFieldDataValueField,它可能會工作;否則可能會失敗。

希望這可能有所幫助。

+0

如果您需要其他代碼中沒有組合框的默認密鑰,該怎麼辦? – Fabio

+0

如果是這種情況,那麼他可以通過相同的索引從該數組(Key []等)獲得Key(或任何對象)。此致, –

+0

對不起,但行'comboboxClickerKey.SelectedItem = Properties.Settings.Default.Key;'工作正常。 – Fabio