2012-06-12 79 views
0

我想寫一個switch語句,會有類似的效果,我在下面的代碼中顯示,但(顯然),它不工作。一次可以在兩個組合框中選擇某些內容是不可能的。有關如何完成此任何想法?我正在更新一個較舊的程序,並且我正在嘗試不重寫一大段代碼。多個開關語句有多個情況?

switch ((cboMAIN.SelectedIndex) || (cboMAINalternate.SelectedIndex)) 
      { 
       case 0: 
        OutputString1 = "A"; 
        break; 
       case 1: 
        OutputString1 = "C"; 
        break; 
       case 2: 
        OutputString1 = "E"; 
        break; 
       case 3: 
        OutputString1 = "F"; 
        break; 
       case 4: 
        OutputString1 = "I"; 
        break; 
       case 5: 
        OutputString1 = "J"; 
        break; 
       case 6: 
        OutputString1 = "K"; 
        break; 
      } 

回答

2

嘗試使用

switch ((cboMAIN.SelectedIndex > -1) ? cboMAIN.SelectedIndex : cboMAINalternate.SelectedIndex) 
{ 
+0

工作。我是編程新手;我從來沒有使用過內聯IF語句。酷解決方案! – Kulahan

+0

@DanCallahan根據你的邏輯,你的邏輯總是有效的,使用內聯條件來檢查主邏輯是有意義的;如果它的價值不變,請使用替代品。 :-) – OmegaMan

+0

我相信0是一個有效的指標;我認爲它應該是'cboMAIN.SelectedIndex> -1'。請參閱[MSDN](http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedindex.aspx) –

1

不,那是不可能的(至少不是辦法你這樣做)。

問題是,你想達到什麼目的?如果你有某種切換到兩個指數之間進行切換,你可以做這樣的事情:

bool useAlternative = ...; 
switch(useAlternative ? cboMAINalternate.SelectedIndex : cboMAIN.Selectedindex) { 
    // ... 
} 
0

中始終有一個選擇元素選定的項目,所以你要檢查一個你考慮到沒有選擇中,例如第一項:

var item = cboMAIN.SelectedIndex; 
if (item = 0) item = cboMAINalternate.SelectedIndex; 

switch (item) { 
    ... 
0

也許concisest方式:

switch (Math.Max(cboMAIN.SelectedIndex, cboMAINalternate.SelectedIndex)) 
{ 
    // ... 
} 
0

MSDNSelectedIndex將返回如果選擇在ComboBox上爲空,則爲。

下面的代碼應選擇與選擇一個ComboBox並通過你的switch語句,或失敗,如果既沒有選擇:

ComboBox comboBoxToUse; 

if (cboMAIN.SelectedIndex > -1) 
{ 
    comboBoxToUse = cboMAIN; 
} 
else if (cboMAINalternate.SelectedIndex > -1) 
{ 
    comboBoxToUse = cboMAINalternate; 
} 
else 
{ 
    throw new InvalidOperationException("Neither combo box contains a selection."); 
} 

switch (comboBoxToUse.SelectedIndex) 
{ 
    ... 
} 

你也可能要拋出一個異常,如果兩個ComboBox ES有選擇。