Powershell Forms:如何一起验证不同类型的System.Windows.Forms?

时间:2015-09-23 16:30:52

标签: forms powershell combobox scripting

我创建了一个PowerShell表单,其中包含TextBox和ComboBox字段,这些字段按以下顺序列在表单中:

  1. 文本框
  2. 组合框
  3. 组合框
  4. 组合框
  5. 文本框
  6. 然后我在表单底部有一个OK按钮,该按钮设置为禁用以开始。

    我希望能够在启用“确定”按钮之前验证所有5个字段是否包含一些文本,但是它们遇到了障碍,因为它似乎不是 我可以看到两种类型的盒子相互作用。 以下是我到目前为止 - 这给了我:

    1. 如果两个TextBox都包含文本,则启用“确定”按钮
    2. 或者......如果三个ComboBox包含文本,则启用“确定”按钮
    3. $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个字段的快乐和协同工作 - 因此第一行和最后一行仍然是分开的。有没有办法将这些代码组合在一起,或者可能是一个我忽略的简单方法? 感谢...

1 个答案:

答案 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表示已进行选择。