2014-07-03 32 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