2014-07-03 34 views
0

我想测试一个组合框是否包含值,如果它不然后执行一些代码。该组合框应始终包含两个值这是在形式的版本号7.xx.xxx.xxx 这里是我到目前为止....Powershell测试组合框中的值

function GetAvailableVersions{ 
    if ((Get-Variable UpdateNewVersionCombo).value.Items.ToString() -notlike 7){ 
     $ProdVersionNumber = (Get-ChildItem '\\172.20.10.18\home$\BuildCopier V7 Prod\Optima.exe').VersionInfo.FileVersion 
     $GetProd = ($ProdVersionNumber.ToString()) 
     (Get-Variable UpdateNewVersionCombo).Value.Items.Add($GetProd) 
     $DevVersionNumber = (Get-ChildItem '\\172.20.10.18\home$\BuildCopier V7 Dev\Optima.exe').VersionInfo.FileVersion 
     $GetDev = ($DevVersionNumber.ToString()) 
     (Get-Variable UpdateNewVersionCombo).Value.Items.Add($GetDev) 
    } 

} 

功能GetAvailableVersion被调用时的选择指标另一个组合框被改变。当它第一次被调用时,它将版本号添加到组合框中,但是当第一个组合框的索引被更改时,当前值的测试失败并且版本号再次被添加到组合框,导致版本被复制。 请有人可以阐明如何测试组合框已经包含有7

回答

0

开始你可以简单地调用Items.Clear()方法,清理出组合框的值,将替换值前值的一些情况。这就是我通常为用于将值填充到多项控件(如组合框或ListView等)中的UI代码所做的工作。

如果要测试ComboBox中是否存在某个项目,您将拥有首先确定将什么类型的对象添加到ComboBox,然后对相应的属性进行比较。如果你正在做的是将String对象添加到ComboBox,那么它更容易。

这是一个独立运行的例子,使用一个普通但复杂的对象System.Diagnostics.Process

# Get a list of processes 
$ProcessList = Get-Process; 
# Create the ComboBox 
$ComboBox = New-Object -TypeName System.Windows.Forms.ComboBox; 
# Clear all items from ComboBox 
$ComboBox.Items.Clear(); 
# Add Process objects to ComboBox 
$ProcessList | % { [void]$ComboBox.Items.Add($PSItem); } 


# Test if ComboBox contains a process named Notepad 
$ComboBox.Items.Name -contains 'notepad'; 
# Result: $false 

# Test if ComboBox contains a process named System 
$ComboBox.Items.Name -contains 'System'; 
# Result: $True 
+0

嗨特雷弗,谢谢你的建议,真的很感激。这将起作用,但意味着每当第一个组合框的选定项目发生变化时,代码将被执行,而我真的在寻找一种解决方案来测试第二个组合框是否包含任何值,并在那里执行代码没有值存在。 – DogManDave

+0

@DogManDave:嗨戴夫,我用一个比较例子更新了答案。 –

+0

太棒了!非常感谢!应该这样做,因为这些值是将文件版本号转换为字符串并始终启动“7.”。我是否正确地假设我可以在“包含”值中使用通配符?即'$ ComboBox.Items.Name -contains'7。?'' – DogManDave