如果匹配,请检查下拉菜单

时间:2016-08-25 22:09:48

标签: c#

长话短说:有给定的特定标签(如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;
        }
    }

对我而言,它会像这样工作。我希望我也能帮助其他人,但我仍然愿意接受任何更好的想法:)!

1 个答案:

答案 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确保在任何情况下都会重置警卫,即使发生异常也是如此。