长话短说:有给定的特定标签(如Pop,Rock,Metal),用户应该写入文本框,每次添加char时,如果一个(或多个)匹配,则检查给定标签。目前我正在使用带有以下代码的组合框:
private void EnterComboBox_TextChanged(object sender, EventArgs e)
{
List<string> AllTags = new List<string>();
AllTags.Add("Pop");
if (AlleTags[0].ToLower().StartsWith(EnterComboBox.Text.ToLower()))
{
EnterComboBox.Items.Clear();
EnterComboBox.Items.Add("Pop");
EnterComboBox.DroppedDown = true;
}
}
这工作正常,但问题是,在第一个字符输入后,Dropbox会下降,输入的文本会被标记,并在输入新的字符时被覆盖。我有什么想法可以解决这个问题?欢迎任何想法,它不必是一个组合框:)!
编辑: 经过一些更详细的研究,我意识到我可以这样解释:基本上我希望组合框的行为类似谷歌的搜索条。用户输入字母,在下拉菜单中是自动填充建议
此刻我解决了这个问题: 我在一个组合框前放置了一个文本框,这样只有组合框的箭头可见,如果点击它,你会自动在文本框中书写。
public Form1()
{
InitializeComponent();
EingabeTextBox.AutoSize = false;
EingabeTextBox.Size = new Size(243, 21); //the size of the combobox is 260;21
}
private void EingabeTextBox_TextChanged(object sender, EventArgs e)
{
EingabeComboBox.Items.Clear();
List<string> AlleTags = new List<string>();
AlleTags.Add("Example");
if (AlleTags[0].ToLower().StartsWith(EingabeTextBox.Text.ToLower()))
{
EingabeComboBox.Items.Add(AlleTags[0]);
EingabeComboBox.DroppedDown = true;
}
}
对我而言,它会像这样工作。我希望我也能帮助其他人,但我仍然愿意接受任何更好的想法:)!
答案 0 :(得分:1)
在键入时更改ComboBox条目显然会产生不希望的干扰。而是组合TextBox和ListBox。
System.setProperty("webdriver.chrome.driver", "C:\\selenium\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://119.81.222.91:8080/camps/security/Login_FS.html");
WebDriverWait wait = new WebDriverWait(driver, 10);
//First switch to frame with id paramFrame1
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("paramFrame1"));
//Now find the element
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("user"))).sendKeys("xyz");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("buttonOK"))).click();
private bool changing;
private void TextBox_TextChanged(object sender, EventArgs e)
{
if (!changing) {
changing = true;
try {
// manipulate entries in the ListBox
} finally {
changing = false;
}
}
}
private void ListBox_IndexChanged(object sender, EventArgs e)
{
if (!changing) {
changing = true;
try {
// Put selected entry into TextBox
} finally {
changing = false;
}
}
}
后卫确保ListBox在TextBox中输入文本时不会影响TextBox,反之亦然。
try-finally确保在任何情况下都会重置警卫,即使发生异常也是如此。