【问题标题】:powershell populate combobox basing on the selected item on another comboboxpowershell 根据另一个组合框上的选定项填充组合框
【发布时间】:2016-01-29 23:47:23
【问题描述】:

这次我遇到了另一个 PowerShell GUI 挑战。 我有一个包含两个不同组合框(combobox1 和 combobox2)的表单

我想做的是: 第一个组合框显示我拥有的所有客户端的列表,第二个组合框显示可用于在第一个组合框中选择的客户端的所有不同邮箱。

再一次,我不知道该怎么做,所以我向你们寻求建议。

我设法在第一个组合框中显示了所有客户端的列表。但我从未设法填充第二个组合框,显示该特定客户端可用的不同邮箱。

这是我到目前为止的代码,问题是我不知道如何“触发第二个组合框的人口”

$MainForm_Load={
#TODO: Initialize Form Controls here
add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010 -ea silentlycontinue
import-module activedirectory

$Clients = Get-ADOrganizationalUnit -SearchBase 'OU=Clients,DC=asp,DC=xaracloud,DC=net' -SearchScope Onelevel -Filter * -Properties Description

foreach ($client in $Clients)
{
    $CurrentClient = "{0} ({1})" -f $client.Name, $client.Description
    Load-ComboBox $combobox1 $CurrentClient -Append
}

if ($combobox1.SelectedIndex -gt -1)
{

    $ClientSelected = ($combobox1.SelectedItem) -replace " \(.*\)"

    $Mailboxes = Get-Mailbox -OrganizationalUnit $ClientSelected
    foreach ($mailbox in $Mailboxes)
    {
        $CurrentMailbox = "{0} ({1})" -f $mailbox.Name, $mailbox.Alias
        Load-ComboBox $combobox2 $CurrentMailbox -Append
    }

}

}

请注意,为了根据第一个组合框的选择填充第二个组合框,我必须查询我的交换服务器,这需要几秒钟。有没有办法显示一个进程栏来说明请求正在处理?我不希望用户认为脚本什么都不做或者它不起作用。

【问题讨论】:

    标签: user-interface powershell combobox populate


    【解决方案1】:

    从 Get-Mailbox 行中删除 | Out-String 并添加使用以下选项之一(当然还有更多):

    使用 ComboBox.SelectionChangeCommitted 事件:

    “当用户更改所选项目并且该更改显示在 ComboBox 中时发生”

    $combobox2_SelectionChangeCommitted={
    
      $Mailboxes = Get-Mailbox -OrganizationalUnit $ClientSelected
      foreach ($mailbox in $Mailboxes)
      {
          $CurrentMailbox = "{0} ({1})" -f $mailbox.Name, $mailbox.Alias
          Load-ComboBox $combobox2 $CurrentMailbox -Append
      }
    
    }
    

    使用按钮:

    $button1_Click={
    
    $Mailboxes = Get-Mailbox -OrganizationalUnit $ClientSelected
      foreach ($mailbox in $Mailboxes)
      {
          $CurrentMailbox = "{0} ({1})" -f $mailbox.Name, $mailbox.Alias
          Load-ComboBox $combobox2 $CurrentMailbox -Append
      }
    }
    

    另外,还有更多的选择,你可以从上面的一个开始...

    【讨论】:

    • 我同意,这是一个错误,但这不是解决方案。我刚刚测试过它,仍然是同样的问题。我选择了客户端,第二个组合框永远不会填充
    • 如何提交客户选择,一个按钮?还是通过事件处理程序?
    • 我不使用按钮或事件处理程序提交客户端选择。这就是问题所在,我不知道如何触发第二个组合框来填充。一旦选择了客户,我想这样做。所以它会由事件处理程序,但我不知道该怎么做。
    • 我想改用一个事件。我想使用事件的原因是因为用户界面看起来会更好。我已经在使用很多按钮,避免使用更多按钮会很棒。
    • 我想出了如何使用事件来做到这一点,所以我不需要按钮:$combobox1_SelectedIndexChanged={ my code } 无论如何感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    相关资源
    最近更新 更多