【问题标题】:How to collect activated checkboxes in powershell如何在PowerShell中收集激活的复选框
【发布时间】:2015-12-15 04:14:57
【问题描述】:

我在 Powershell 中使用在 Visual Studio 中制作的 WPF 应用程序。我试图弄清楚如何收集激活的复选框并根据选择运行命令。现在,我正在尝试显示一条消息,该消息将向用户显示他们的选择,以便在继续下一步之前进行确认。出于某种奇怪的原因,

if ($checkbox.checked -eq $true) 不起作用。

我要重新创建的是,如果我有一个带有以下复选框的列表框(在表单启动时全部未选中):

Apples Oranges Bananas

并且用户选择了Apples & Bananas,我想要一个消息框来显示用户选择了Apples & Bananas

[System.Windows.Forms.MessageBox]::Show(" show what the user has selected in this line" , "selection")})

并运行将被编程到这些选择的命令。

为了更合适的上下文,我正在创建一个 GUI 来将用户添加到某些组(复选框允许一次添加到多个组)。在继续添加到相应的组之前,我想让用户确切地知道他们选择了哪些用户组。

感谢您的帮助,谢谢!

【问题讨论】:

  • 你是如何初始化$checkbox的?
  • @EdPlunkett 变量是从 Microsoft Visual Studio 获得的 XML 数据初始化的。我正在使用 [link]foxdeploy.com/2015/04/16/… 上的教程
  • 您应该将该链接添加到问题中。您应该在问题中准确描述您的 powershell 脚本从 WPF 应用程序获得的输入以及它是如何获得它的。您还应该在脚本中显示试图显示消息框的代码。然后我们也许能够弄清楚它有什么问题。 “我的车坏了。就上下文而言,我下周要开车去休斯顿”。
  • 这是一个非常酷的例子。我不知道你能做到。
  • 您确实需要使用正确的属性名称...If($Checkbox.IsChecked){} 它应该是 IsChecked 而不是 Checked。阅读该系列的第 3 部分,他专门介绍了复选框!

标签: wpf powershell checkbox


【解决方案1】:

您想要的属性是isChecked,而不是checked。简单例子:

[xml]$xaml = @"
<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="Window" Title="Initial Window" WindowStartupLocation = "CenterScreen"
    SizeToContent = "WidthAndHeight" ShowInTaskbar = "True" Background = "lightgray"> 
    <StackPanel > 
        <CheckBox x:Name="CheckBox1" Content = 'Value for checkbox one'/>
        <TextBox />      
    </StackPanel>
</Window>
"@

$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load( $reader )

$CheckBox1 = $Window.FindName("CheckBox1")

$CheckBox1.Add_Click({
    if($CheckBox1.isChecked) {
        $CheckBox1.Content | Out-Host
    }
})

$Window.Showdialog() | Out-Null

【讨论】:

    【解决方案2】:

    @sodawillow 发布的解决方案有效。如果您需要输出用户的选择以进行确认,下面的代码就可以做到这一点。

    for ($i=#; $i -le #; $i++){ if ($listbox.items.item($i).isChecked -eq $true)
    

    {$string = $listbox.items.item($i).content $collectionstring = @("$collectionstring" + "$string")}} [System.Windows.Forms.MessageBox]::Show("$collectionstring" , "Status")

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 1970-01-01
      • 2021-02-25
      • 2012-02-19
      • 2016-04-25
      • 2014-05-27
      • 1970-01-01
      • 2011-08-22
      • 2016-08-02
      相关资源
      最近更新 更多