2014-06-26 53 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)