首页 > 解决方案 > Windows 窗体 (Powershell) | 消息框出现两次

问题描述

我希望你们一切都好!

下面的消息框出现了两次,我不知道为什么。仅当我在按钮之间切换时才会发生这种情况。

你能帮我理解为什么吗?

 $ActiveDirectory.controls.AddRange(@($ToolsPanel,$ADToolsPanel,$VerUsersLabel,$VerUsersCancel,$VerUsersOK,$VerUsersTextBox,$FerLabelPanel))

$VerUsersOK.Add_Click({
    if ($VerUsersTextBox.Textlength -eq 0){
     
        [System.Windows.MessageBox]::Show('Não foi introduzida nenhuma informação',$ButtonText,'OK','Error')

    }  
    
})

})


$AlButton.Add_Click({


$ActiveDirectory.controls.Clear()
$AlUsersOptionsGroupbox.controls.AddRange(@($AlUsersUnlockCheckBox,$AlUsersDisableCheckBox,$AlUsersMustChangeCheckBox,$AlUsersEnableCheckBox))
$ActiveDirectory.controls.AddRange(@($ToolsPanel,$ADToolsPanel,$AlPasswordLabel,$AlPasswordTextBox,$AlUsersLabel,$AlUsersTextBox,$AlOKButton,$AlCancelButton,$AlCPasswordLabel,$AlCPasswordTextBox,$AlUsersOptionsGroupbox))

$AlOKButton.Add_Click({

    if (($AlUsersTextBox.TextLength -eq 0) -or ($AlPasswordTextBox.TextLength -eq 0) -or ($AlCPasswordTextBox.TextLength -eq 0)){

            $ButtonText = $AlButton.text
            [System.Windows.MessageBox]::Show('Não foi introduzida nenhuma informação',$ButtonText,'OK','Error')

    }
})

})

[void]$ActiveDirectory.ShowDialog()

标签: powershellwindows-forms-designer

解决方案


正如所指出的,您嵌套$AlOKButton.Add_Click$AlButton.Add_Click. 每次$AlButton点击你都会添加一个监听器到$AlOKButton. 如果单击$AlButton10 次,消息框将显示 10 次。

$AlButton.Add_Click({
  $ActiveDirectory.controls.Clear()
  $AlUsersOptionsGroupbox.controls.AddRange(@($AlUsersUnlockCheckBox,$AlUsersDisableCheckBox,$AlUsersMustChangeCheckBox,$AlUsersEnableCheckBox))
  $ActiveDirectory.controls.AddRange(@($ToolsPanel,$ADToolsPanel,$AlPasswordLabel,$AlPasswordTextBox,$AlUsersLabel,$AlUsersTextBox,$AlOKButton,$AlCancelButton,$AlCPasswordLabel,$AlCPasswordTextBox,$AlUsersOptionsGroupbox))
})

$AlOKButton.Add_Click({
  if (($AlUsersTextBox.TextLength -eq 0) -or ($AlPasswordTextBox.TextLength -eq 0) -or ($AlCPasswordTextBox.TextLength -eq 0)){
    $ButtonText = $AlButton.text
    [System.Windows.MessageBox]::Show('Não foi introduzida nenhuma informação',$ButtonText,'OK','Error')
  }
})

推荐阅读