2017-02-22 32 views
0

Так что в моей программе у меня три чекбокса (A, B и C). и я хочу сохранить содержимое флажка, который отмечен в текстовом файле. Я делаю это с помощью если заявления, как показано ниже:Как проверить, проверено ли несколько флажков

if (a.IsChecked == true) 
{ 
    res = a.Content.ToString() + " is checked"; 
} 
else if (b.IsChecked == true) 
{ 
    res = b.Content.ToString() + " is checked"; 
} 
else if (c.IsChecked == true) 
{ 
    res = c.Content.ToString() + " is checked"; 
} 

А вот где я храню вышеуказанные значения в строку, а затем в мой код в текстовый файл

string test = res; 

Теперь это работает для меня. Поэтому я решил попробовать проверить, проверено ли несколько флажков. Таким образом, добавил ниже, если заявления:

else if ((a.IsChecked == true) && (b.IsChecked == true) && (c.IsChecked == true)) 
{ 
    res= a.Content.ToString() + " " + b.Content.ToString() + " " + c.Content.ToString() 
} 

, но это не работает со мной, потому что в конце концов Рез печатается в текстовом файле в качестве, а не б с. Любая идея, что я делаю неправильно?

Также обратите внимание, что я уже инициализирован Рез в верхней части моего кода как строка:

string res; 

Я не получаю сообщение об ошибке, когда я запускаю мой код, так что я не уверен, где моя ошибка есть. любая помощь с этим очень ценится.

Большое спасибо :)

+0

еще если ((a.IsChecked == верно) && (b.IsChecked == верно) && (c.IsChecked == верно)) Если какое-либо условие не удастся, оно будет «0» – Ragavan

ответ

0

Вы можете реализовать это следующим образом:

string res = ""; 
if (a.IsChecked) 
{ 
    res += a.Content.ToString(); 
} 
if (b.IsChecked) 
{ 
    res += b.Content.ToString(); 
} 
if (c.IsChecked) 
{ 
    res += c.Content.ToString(); 
} 

или просто

string res = $"{(a.IsChecked?a.Content+" ":"")}{(b.IsChecked?b.Content+" ":"")}{(c.IsChecked?c.Content:"")}"; 
+0

Именно то, что я искал! спасибо большое :) –

0

Сво хорошая практика, чтобы использовать в этих случаях StringBuilder. С другой стороны, если это нормально, чтобы иметь одну строку для каждого CheckBox, вы можете использовать следующее:

StringBuilder sb = new StringBuilder(); 
checkappend(ref sb, a); 
checkappend(ref sb, b); 
checkappend(ref sb, c); 
string res = sb.ToString(); 

, в котором

static void checkappend(ref StringBuilder sb, CheckBox ck) 
{ 
    sb.Append(ck.Content.ToString()); 
    sb.Append(ck.IsChecked == true ? "is checked." : " is NOT checked."); 
    sb.Append(Environment.NewLine); 
} 

Обратите внимание, что создание отдельного класса может помочь вам, когда в списке есть много CheckBoxes. Вы можете просто использовать

foreach (var ck in listOfCheckBoxes) 
     checkappend(ref ck, c); 
+0

Большое спасибо за ваш ответ, но можете ли вы объяснить мне, что такое stringbuilder? :) –

+0

Что-то похожее на '' string'', однако оно увеличивает производительность. см. [this] (http://stackoverflow.com/questions/3069416/difference-between-string-and-stringbuilder-in-c-sharp) или [это] (http://stackoverflow.com/questions/73883/ строка-против-StringBuilder). – Ron

0

Это несколько комбинаций для проверки. Просто удалите else из первого фрагмента кода, чтобы запускать все проверки один за другим. Вы получите только отчет из последней успешной проверки, чтобы иметь несколько отчетов, которые у вас есть, накапливают их как-то (добавьте в список, объедините в многострочную строку и т. Д.).

Вот простой один вкладыш (с использованием LINQ):

var result = string.Join(" and ", new[] { a, b, c }.Where(o => o.IsChecked).Select(o => $"{o.Content} is checked")); 
+0

Большое спасибо за это! :) –

 Смежные вопросы

  • Нет связанных вопросов^_^