2014-01-15 174 views
0

我有4個標籤,4個答案。其中一個是正確的。當我按下按鈕時,我想要隱藏2個答案。所以,我有:刪除標籤foreach

string[] possible_answers = { "A", "B", "C", "D" }; 
string correct_answer= keyletter; 
string[] wrong_answers= posibile_variante.Where(val => val != correct_answer).ToArray(); 

和標籤

label_0 
label_2 
label_1 
label_3 

假設

label_0 = A 
label_1 = B 
label_2 = C 
label_3 = D 

如何隱藏2個回答錯標籤?

+1

我的結果沒有顯示'4 - 1 = 2' – Jonesopolis

+0

@Jonesy你的計算器必須打破然後。試試另一個。 – Servy

+0

爲什麼要4 - 1 = 2?我需要隱藏3個錯誤中的2個答案,難以理解的是什麼? – user2985344

回答

0

與您的標籤字典一樣

var labels = Dictionary<string, Label> { { "A", label_0 }, { "B", label_1 }, ... }; 

然後點擊一個按鈕,你說

foreach (var wa in wrong_answers) 
    labels[wa].Visible = false; 

也許這不是完全像你需要它,但你可以從它那裏得到一個想法。

+0

你用字典的想法是完美的。謝謝。還有一個問題,請問除去3個錯誤答案中的2個的最佳方法是什麼?我遞增了一個i並驗證if(i <2)標籤[wa] .Visible = false; – user2985344

+0

有很多方法可以做到這一點。例如'。凡(VAL => VAL = correct_answer!)。取(2).ToArray();'然後循環將僅去除前兩個錯誤的答案。如果你想隨機選擇,你必須以另一種方式來做。 –

0

把一個過於複雜的例子放在一起,假設您可能想要更改給定問題的可能答案的數量。它根據possible_answers(ResetLabels())中元素的數量動態設置屏幕上的標籤數量,然後隨機選擇N個(#顯示的項目 - 保留顯示的數字)編號爲錯誤要從屏幕上移除的答案RemoveWrongLabels 。 @Ondrej推薦使用Take(2),但是靜態選擇列表中的前2個元素(例如,用戶知道總是知道來自剩餘項目的正確答案)。 MSDN:Returns a specified number of contiguous elements from the start of a sequence.

string[] possible_answers = { "A", "B", "C", "D" }; 
    private void button2_Click(object sender, EventArgs e) 
    { 
     ResetLabels(); 

    } 
    private void ResetLabels() 
    { 
     for (int i = 0; i < this.labelContainer.Controls.Count - 1; i++) 
     { 
      this.labelContainer.Controls[i].Dispose(); 
     } 
     this.labelContainer.Controls.Clear(); 
     for (int i = possible_answers.Count() - 1; i >= 0; i--) 
     { 
      Label l = new Label(); 
      l.Text = possible_answers[i]; 
      l.Dock = DockStyle.Top; 
      this.labelContainer.Controls.Add(l); 
     } 
    } 
    private void button3_Click(object sender, EventArgs e) 
    { 
     RemoveWrongLabels(3, 2); 
    } 
    private void RemoveWrongLabels(int RightAnswer, int ItemsToDisplay) 
    { 

     Random rand = new Random(); 
     List<int> AnswersToHide = new List<int>(); 
     while (AnswersToHide.Count < labelContainer.Controls.Count - ItemsToDisplay) 
     { 
      int indexToHide = rand.Next(0, labelContainer.Controls.Count); 
      if (!AnswersToHide.Contains(indexToHide) && labelContainer.Controls[indexToHide].Text != possible_answers[RightAnswer]) 
      { 
       AnswersToHide.Add(indexToHide); 
      } 
     } 


     foreach (var item in AnswersToHide) 
     { 
      this.labelContainer.Controls[item].Visible = false; 


     } 
    } 
+0

哇,很好的例子,我會在幾個小時內嘗試。謝謝 – user2985344