PDA

Показать полную графическую версию : [решено] Вложение в условии else if elseif


alado
05-07-2018, 13:46
Добрый день.
Подскажите пожалуйста, есть конструкция if else оформленная вот в таком стиле:

if
{

}
elseif
{

}
if
{

}
else
{

}
elseif
{

}


Получается, что вложенная конструкция в if и else не работает!


Более точнее код выглядит вот так:


elseif ($traceroute.SelectedItem -eq $ConfigProperty5)
{
$Summa.Enabled = $true
$rasstreka.Text = $ConfigProperty6
$rasstmore.Text = $ConfigProperty7
$gateway.Text = $ConfigProperty8
$uchastok.Text = $ConfigProperty202

[array]$lstItemsmaterial = ("", "$global:ConfigProperty203", "$global:ConfigProperty204", "$global:ConfigProperty205")
$material.Items.Clear();
$material.Items.AddRange($lstItemsmaterial);
$material.Text = $lstItemsmaterial[0].ToString();

if ($material.SelectedItem -eq $ConfigProperty205)
{

[array]$lstItemsvodoizmechenie = ("", `
"$global:ConfigProperty208", `
"$global:ConfigProperty209", `
"$global:ConfigProperty210", `
"$global:ConfigProperty211", `
"$global:ConfigProperty212")
$vodoizmechenie.Items.Clear();
$vodoizmechenie.Items.AddRange($lstItemsvodoizmechenie);
$vodoizmechenie.Text = $lstItemsvodoizmechenie[0].ToString();
}
elseif (($material.SelectedItem -eq $ConfigProperty203) -or ($material.SelectedItem -eq $ConfigProperty204))
{

[array]$lstItemsvodoizmechenie = ("", `
"$global:ConfigProperty210", `
"$global:ConfigProperty211", `
"$global:ConfigProperty212")
$vodoizmechenie.Items.Clear();
$vodoizmechenie.Items.AddRange($lstItemsvodoizmechenie);
$vodoizmechenie.Text = $lstItemsvodoizmechenie[0].ToString();
}


}


В моем случае не работает:


if ($material.SelectedItem -eq $ConfigProperty205)
{

[array]$lstItemsvodoizmechenie = ("", `
"$global:ConfigProperty208", `
"$global:ConfigProperty209", `
"$global:ConfigProperty210", `
"$global:ConfigProperty211", `
"$global:ConfigProperty212")
$vodoizmechenie.Items.Clear();
$vodoizmechenie.Items.AddRange($lstItemsvodoizmechenie);
$vodoizmechenie.Text = $lstItemsvodoizmechenie[0].ToString();
}
elseif (($material.SelectedItem -eq $ConfigProperty203) -or ($material.SelectedItem -eq $ConfigProperty204))
{

[array]$lstItemsvodoizmechenie = ("", `
"$global:ConfigProperty210", `
"$global:ConfigProperty211", `
"$global:ConfigProperty212")
$vodoizmechenie.Items.Clear();
$vodoizmechenie.Items.AddRange($lstItemsvodoizmechenie);
$vodoizmechenie.Text = $lstItemsvodoizmechenie[0].ToString();
}

Kazun
05-07-2018, 14:08
Получается, что вложенная конструкция в if и else не работает! - Конструкция объвлена неправильно, поэтому и не работает.

About If - https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_if?view=powershell-6

$a = 10
$obj = 101

if($a -eq 1) {
1
} elseif($a -eq 10) {
"Inside elseif"
if($obj -gt 100) {
"`t->Inside if"
"`t`tMore than 100"
} else {
"Less than 100"
}
} else {
"Unknown"
}

Вывод:
Inside elseif
->Inside if
More than 100


То что привели, какой-то отрывок кода без $traceroute, $ConfigProperty205, $material никак не облегчает понимание. Приводите весь код.

alado
05-07-2018, 18:17
Приводите весь код. »
Пишу в PowerShell Studio, весь код на экспорте занимает 32 тысячи строк!

YuS_2
05-07-2018, 18:36
Пишу в PowerShell Studio, весь код на экспорте занимает 32 тысячи строк! »
Так весь вопрос в том, что конструкция не работает не потому, что во внутреннем коде powershell ошибка, а потому, что ошибка поселилась в Вашем коде.
Вы привели код частично, где нет ни значений используемых переменных/объектов, ни законченного кода, чтобы его проверить, ни результата выполнения кода и выдаваемой ошибки... поэтому вопрос Ваш, с большой вероятностью, канет в Лету.

alado
09-07-2018, 09:14
Ссылка на скачивание https://yadi.sk/d/UFr-nA763YwvFK , в тему вложить как вложение или как текст у меня не получилось, так как существуют ограничения на такой объем!

Kazun
09-07-2018, 10:51
Проблема в скрипте в формировании материала, $material.SelectedItem - нельзя выбрать, потому что в этом блоке идет его формирование и всегда будет пусто.

Выбираем маршрут, разово заполняется материал, добавляем событие на выбор материала и только потом можно выполнить блок if ($material.SelectedItem -eq $ConfigProperty205).

Как пример добавляю,например, нa 5126:

$material.add_SelectedValueChanged({
if($material.SelectedItem -eq $ConfigProperty205) {
msgbox $material.SelectedItem
}
})



https://image.ibb.co/hqk0CT/1_Copy.jpg

Т.е. надо продумать логику в скрипте, как пользователь будет выбирать материал с последующими изменениями переменной $vodoizmechenie

alado
09-07-2018, 11:40
Kazun, спасибо. Не додумал сам до SelectedValueChanged. По вопросу логики буду дальше думать.

YuS_2
09-07-2018, 12:58
Ссылка на скачивание »
Тогда вопрос:
А где в этом файле та часть кода, которая не работает:
В моем случае не работает: »
?

Ну и есть строки, начиная с 3817, в которых присутствует обращение к несуществующей переменной $dir, она появляется в строке 11977... это, как минимум, приведет к перманентному невыполнению условий.
И ещё в коде присутствует обращение к базе данных, в формате .xlsx, его бы тоже не мешало для полноты картины обозначить. Реальные данные, естественно, не нужны...




© OSzone.net 2001-2012