我如何 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;
}
所以我得到了一个列表框,其中我将有随机 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;
}