2016-01-17 2 views
0

У меня проблема со строкой списка. Я ставлю 3 значения в MyCollectionКак получить следующее значение из списка <string>

List<string> myCollection = new List<string>(); 

myCollection.Add(Encoding.Default.GetString(data)); 
myCollection.Add(Encoding.Default.GetString(data2)); 
myCollection.Add(Encoding.Default.GetString(data3)); 

и теперь у меня есть 3 значения: A, B, C

, но теперь я хочу, чтобы заблокировать кнопки с содержит эти значения:

for (var i = 0; i < myCollection.Count; i++) 

{ 

    if (myCollection.Contains(A)) 
    { 

     this.A.Enabled = false; 

    } 

    else if (myCollection.Contains(B)) 
    { 

     this.B.Enabled = false; 
    } 

    else if (myCollection.Contains(C)) 
    { 

     this.C.Enabled = false; 
    } 
} 

После этого loop только первая кнопка = false. Теперь петля сделана 3 раза эта же кнопка блокировки кнопки A, и мой вопрос: Как блокировать другие кнопки?

Теперь я получаю в первом запуске петли:

this.A.Enabled = false; 

2nd this.A.Enabled = false; 


3rd this.A.Enabled = false; 

, но я хочу:

1st : this.A.Enabled = false; 

2nd : this.B.Enabled = false; 

3rd : this.C.Enabled = false; 
+1

Почему вы положить это в цикле? И почему вы даже используете список? –

+1

Является ли 'A' кнопкой или строкой? –

+2

Вы хотите сказать 'if (myCollection.Contains (" A "))' вместо 'if (myCollection.Contains (A))'? Если да, отредактируйте этот вопрос. –

ответ

3

Вам не нужна петля для этого. Просто используйте простые операторы if без else.

if (myCollection.Contains("A")) 
    this.A.Enabled = false; 

if (myCollection.Contains("B")) 
    this.B.Enabled = false; 

if (myCollection.Contains("C")) 
    this.C.Enabled = false; 

Главным образом else вызывает проблемы для вас. Если условие для A было истинным, тогда код для B и C не выполнялся. Так работает else.

+0

Спасибо за ваше ясное и полезное объяснение :) – Icero

0

Не знаете, чего именно вы пытаетесь достичь, но ваша проблема здесь в том, что вы используете if..else. Если какое-либо из условий верно, то остальное не будет разрешено.

Чтобы решить вашу проблему, просто удалите ключевые слова else из ваших условий.

Кроме того, при использовании Contains цикл является ненужным.

Если вы настаиваете на петле, вы должны изменить условие немного, а потом еще будешь правильно использовать:

 for (int i = 0; i < myCollection.Count; i++)    
     { 
     if (myCollection[i] == A) 
     { 
      this.A.Enabled = false;     
     } 

     else if (myCollection[i] == B) 
     { 
      this.B.Enabled = false; 
     } 

     else if (myCollection[i] == C) 
     { 
      this.C.Enabled = false; 
     } 
     } 
Смежные вопросы