2014-06-26 52 views
0

我使用HtmlList對象的屬性SelectedItemsAsString來選擇select-Tag中的多個項目。HtmlList:在填充選擇中選擇選項

myHtmlList.SelectedItemsAsString = new string[] {"a"}; 

這可以在演示中按預期工作,但不能在我的高效網站中使用,因爲我的select-Tag有左填充。

<select multiple="multiple" style="padding-left: 12px; width: 400px;"> 
    <option>a</option> 
    <option>b</option> 
    <option>c</option> 
</select> 

這會導致鼠標點擊到實際選項的左側,因此沒有選擇任何選項。 任何想法如何在不移除填充的情況下做到這一點?

回答

0

你說得對。看起來像CodedUI的bug對我來說。它不是單擊列表項目控件,而是點擊所選項目行的左上角。

作爲替代方案,我們可以自己點擊並選擇項目。

var selectedItems = new string[] { "a", "c" }; 

// Clear any existing selections 
myHtmlList.SelectedIndices = new int[] { }; 

// Select items 
myHtmlList.GetChildren().Cast<HtmlListItem>().ToList().ForEach(f => 
{ 
    Keyboard.PressModifierKeys(ModifierKeys.Control); 
    if (selectedItems.Contains(f.DisplayText)) 
    { 
     Mouse.Click(f); 
    } 
    Keyboard.ReleaseModifierKeys(ModifierKeys.Control); 
}); 

以上代碼將查找HtmlList的所有子項,將它們轉換爲HtmlListItem。對於選擇,首先按「CTRL」鍵,然後對於每個列表項目,如果顯示文本與所選項目列表匹配,它將點擊列表項目。最後它將釋放「CTRL」鍵。

如果您的應用程序中有很多HtmlList項目,那麼我會建議將其轉換爲HtmlList的擴展方法。

就是這樣。

public static void SelectItems(this HtmlList htmlList, string[] selectedItems)