如何根据列表框中出现的次数来允许/拒绝密钥?

时间:2015-02-08 09:43:31

标签: textbox listbox key keypress keydown

所以我有一个列表框,我将随机元音/缺点,我想根据列表框上的这些键限制该人可以在文本框上写的内容。到目前为止,我只允许列表框中的内容,但您可以根据需要多次使用它(例如,您在列表框中有ABIIDC,您可以在texbox上键入aaaaaaabbbbbiiiiiidddddddc),我想要的是他们能够使用每个键在列表框中出现的次数(在前一种情况下,一次,一次,两次,一次,一次)。 这就是我到目前为止所做的:

 private bool denykey = false;
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        denykey = false;
        if (!listBox1.Items.Contains(e.KeyCode))
        {
            denykey = true;
        }
          }

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
     if (denykey == true)
     {
         e.Handled = true;
       }
       if(Control.ModifierKeys == Keys.Control)
       {
           e.Handled = true;
       }
    }    

不介意“控制”部分,只是为了防止复制和粘贴

1 个答案:

答案 0 :(得分:0)

好的,在一些朋友的帮助下,我能够得到我想要的东西,这就是我们所做的:

  private bool denykey = false;
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Back) 
        { 
            denykey = false;
        return;
        }

        var countText = 0;
        foreach (var letter in textBox1.Text)
            if (letter.Equals(e.KeyCode.ToString()[0]))
                countText = countText + 1;

        var countList = 0;
        foreach (var letterList in listBox1.Items)
            if (letterList.ToString().Equals(e.KeyCode.ToString()))
                countList = countList + 1;

        denykey = false;

      if (countText >= countList)
            denykey = true;





    }

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
     if (denykey == true)
     {
         e.Handled = true;
       }
       if(Control.ModifierKeys == Keys.Control)
                     e.Handled = true;

    }