我创建了一个PowerShell表单,其中包含TextBox和ComboBox字段,这些字段按以下顺序列在表单中:
然后我在表单底部有一个OK按钮,该按钮设置为禁用以开始。
我希望能够在启用“确定”按钮之前验证所有5个字段是否包含一些文本,但是它们遇到了障碍,因为它似乎不是 我可以看到两种类型的盒子相互作用。 以下是我到目前为止 - 这给了我:
$objSvrBox.Add_TextChanged({If($This.Text -and $objEmailBox.Text){$OKButton.Enabled = $True}Else{$OKButton.Enabled = $False}})
$objDomDropDown.Add_SelectedIndexChanged({If($This.Text -and $objOSDropDown.Text -and $objMDCDropDown.Text){$OKButton.Enabled = $True}Else{$OKButton.Enabled = $False}})
$objOSDropDown.Add_SelectedIndexChanged({If($This.Text -and $objDomDropDown.Text -and $objMDCDropDown.Text){$OKButton.Enabled = $True}Else{$OKButton.Enabled = $False}})
$objMDCDropDown.Add_SelectedIndexChanged({If($This.Text -and $objDomDropDown.Text -and $objOSDropDown.Text){$OKButton.Enabled = $True}Else{$OKButton.Enabled = $False}})
$objEmailBox.Add_TextChanged({If($This.Text -and $objSvrBox.Text){$OKButton.Enabled = $True}Else{$OKButton.Enabled = $False}})
...但我似乎无法将代码组合在一起以保持所有5个字段的快乐和协同工作 - 因此第一行和最后一行仍然是分开的。有没有办法将这些代码组合在一起,或者可能是一个我忽略的简单方法? 感谢...
答案 0 :(得分:0)
首先,我将创建一个处理验证的函数,并将该函数附加到每个所需表单控件上的事件中。 创建功能:
function validateBoxesAndCombos(){
if($objSvrBox.Text -and $objEmailBox.Text -and $objDomDropDown.Text -and $objOSDropDown.Text -and $objMDCDropDown.Text){
$OKButton.Enabled = $true
}
else{
$OKButton.Enabled = $false
}
}
然后将此功能附加到盒子和组合上的事件中。
$objSvrBox.Add_TextChanged({validateBoxesAndCombos})
$objEmailBox.Add_TextChanged({validateBoxesAndCombos})
$objDomDropDown.Add_TextChanged({validateBoxesAndCombos})
$objOSDropDown.Add_TextChanged({validateBoxesAndCombos})
$objMDCDropDown.Add_TextChanged({validateBoxesAndCombos})
我避免对组合使用selectedIndexChanged事件,因为当有人在组合框中输入值时不会触发,如果在选择项目后用户删除文本,也不会触发。
这就是它的全部。仅当所有5个字段都包含文本时,此代码才会启用“确定”按钮。如果用户消除了任何字段,则“确定”按钮将被禁用。
请注意,在此解决方案中,必须以函数可访问的方式声明文本框和组合框。
如果不允许用户在下拉列表中输入值并强制选择现有值,则可以执行以下任一操作:
1)继续对组合使用TextChanged事件,但在集合中添加空白项。使用功能中定义的条件选择空白项目将禁用“确定”按钮。
2)返回使用SelectedIndexChanged事件。您仍将附加validateBoxesAndCombos函数,但对于组合框,它将按以下方式完成:
$objDomDropDown.Add_SelectedIndexChanged({validateBoxesAndCombos})
然后,您将希望以两种方式之一更改您在该功能中的条件:
a)像这样检查所选索引
$objDropDown.SelectedIndex -ne -1
其中-1表示未选择任何内容。或
b)将每个下拉菜单的第一项设为"请选择一个选项"然后像这样检查selectedIndex:
$objDropDown.SelectedIndex -gt 0
其中0表示选择了默认消息,任何大于0表示已进行选择。