我正在运行一个接受用户输入的GUI,但如果他们犯了错误,可以在最终确定之前进行更改。当表单打开时,我试图将全局变量初始化为null。这是失败的。我在代码上放了一个断点,然后查看了之前的值,然后进入了它。值不会改变。
例如,如果我运行表单并输入“Foo”作为我的全局变量,退出表单,然后再次运行表单,即使在有问题的行执行后,全局的值仍然是“Foo” 。到底是怎么回事?我已将这个确切的代码与其他GUI一起使用,但它从未失败(但是这些值是自动生成的,而不是基于用户输入生成的)。
# Define and initialize global variables
$global:ServerName = $null # <-- This fails to reset the variable from the previous run of the form
function ValidateChoices(){
$OKToGo = $true
$TempServerName = $null
try {
# Only Allow Valid NETBios Name with AlphaNumberic and - up to 15 characters
[ValidatePattern("^[A-Za-z\d-]{1,15}$")]$TempServerName = $ServerNameTextbox.Text
$ServerNameTitle.BackColor = ""
$ServerNameTextbox.BackColor = ""
$global:ServerName = $TempServerName
} catch {
$OKToGo = $false
$ServerNameTitle.BackColor = "Pink"
$ServerNameTextbox.BackColor = "Pink"
}
...
if ( $OKToGo ){
"ServerName=" + $global:ServerName | Out-File c:\debug.txt
}
}
答案 0 :(得分:0)
以下是答案:当针对变量运行ValidatePattern时,会在尝试更改变量时保留并重新评估这些限制。即使没有显式调用ValidatePattern,也是如此。因为它是一个全局变量,这些限制通过表单的多次迭代来进行。因为$ null不符合我列出的ValidatePattern参数,所以忽略了更改值的调用