我如何 allow/deny 一个基于它在列表框中出现的次数的键?

How do i allow/deny a key based on how many times it appears on a listbox?

所以我得到了一个列表框,其中我将有随机 vowels/cons,我想根据列表框上的这些键限制人们可以在文本框上写的内容。到目前为止,我只允许列表框上的内容,但您可以根据需要多次使用它(例如,列表框上有 ABIIDC,您可以在 texbox 上键入 aaaaaaabbbbbiiiiidddddddcccc),而我想要的是让他们能够使用每个键在列表框中出现的次数(在前面的例子中,a 一次,b 一次,i 两次,d 一次,c 一次)。 这是我目前所拥有的:

 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;
       }
    }    

不要介意"control"部分,只是为了防止复制和粘贴

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

  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;

    }