#c# #wpf #visual-studio
#c# #wpf #visual-студия #visual-studio
Вопрос:
Создание приложения WPF на C # У меня есть 5 флажков, и когда выбран один или несколько, я хочу, чтобы аргумент инструкции it изменялся динамически. Например, у меня есть Пн, вт, Ср, чт и Пт в качестве флажков. Если пользователь выбирает Пн, Ср и Пт, то я хочу, чтобы аргумент для оператора if изменился, чтобы отразить это. Я не хочу делать множество разных инструкций if. Вот пример, который я написал, но оператор if, очевидно, неверен
string passArg = "";
if(check_mon.IsChecked == true)
{
passArg = "passArg == "Mon"";
}
if(passArg)
{
MessageBox.Show("RAN");
}
Извините, если это глупый вопрос
Комментарии:
1. Вам нужна инструкция switch?
2. Достаточно только 5 инструкций if. Вы создаете свою строку с помощью оператора =. Как
passArg ="Thu"
иpassArg ="Fri"
и т. Д3. @M.kazemAkhgary и как бы вы вычли, если флажок снят? Вы не можете просто
-=
«некатенировать» строки…4. @Tinwor вы не можете перегружать операторы для существующих классов. И вы не можете получить из
string
, потому что он запечатан.5. Верно, мне нужно поспать. Спасибо за исправление
Ответ №1:
Вы можете инициировать событие, когда флажок установлен Checked
или Unchecked
, и в этом методе вы можете устанавливать или отменять настройки.
Например, в вашей форме xaml:
<CheckBox Checked="Checked" Unchecked="UnChecked"/>
А затем создайте события:
private void UnChecked(object sender, RoutedEventArgs e) {
//Checked, enable, disable or do whatever you want
}
private void Checked(object sender, RoutedEventArgs e) {
//Checked, enable, disable or do whatever you want
}
Ответ №2:
Вы можете проверить наличие значения в списке:
List<string> checked = new List<string>()
if (check_mon.IsChecked)
{
checked.Add("Mon");
}
if (checked.Contains(passArg))
{
MessageBox.Show("RAN");
}
Ответ №3:
Не так просто, как хотелось бы. Вы можете генерировать код динамически, но в данном случае это излишне. Все, что вам нужно, это:
bool isChecked = false;
if(check_mon.IsChecked amp;amp; passArg == "Mon")
{
isChecked = true;
}
...
if(isChecked)
{
MessageBox.Show("RAN");
}
Я не хочу делать множество разных инструкций if.
Ну, вы могли бы установить флажки в цикле, установить Tag
или какое-либо другое свойство и сравнить это с pasArg
но я предпочитаю использовать самое простое решение, которое работает в первую очередь, а затем сосредоточиться на том, чтобы сделать его лучше. Вы можете обнаружить, что тратите больше времени на то, чтобы придумать умное решение (которое вы, возможно, не поймете позже), когда 7 if
инструкций будут работать просто отлично.
Комментарии:
1. Но у меня есть 5 разных дней. Пользователь может выбрать любую комбинацию дней. Это потребовало бы от меня наличия множества различных операторов if для прогнозирования каждой отдельной комбинации
2. @DhavalDesai В вашем примере показан только один день
passArg
. Если вам нужно сравнить с любой комбинацией дней, то покажите, чтоpassArg
было бы в этом случае. В любом случае вам не нужно проверять наличие «каждой отдельной комбинации» в отдельныхif
операторах.