你用退格键删除的数字

本文关键字:删除 数字 | 更新日期: 2023-09-27 18:17:44

当我删除退格文本框中的数字时,我想保存该数字,以便我可以将其与其他文本框中的其他数字进行比较。我怎么做呢?这是我要放入的代码:

List<TextBox> box1;
private void Form1_Load(object sender, EventArgs e)
    {   box1 = this.Controls.OfType<TextBox>()
              .Where(x => x.Name.StartsWith("textBox1")).ToList();
        foreach (TextBox t in box1)
            t.TextChanged += textBox_TC1;
     }
private void textBox_TC1(object sender, EventArgs e)
    {
        TextBox textBox = (TextBox)sender;
        if (textBox.Text.Length == 1 && allwhite == 0)
        {
            bool sameText = box1.Any(x => x.Text == textBox.Text &&
                                         !x.Equals(textBox));
            if (sameText)
                textBox.BackColor = System.Drawing.Color.Red;
        }
        else if (textBox.Text.Length == 0)
        {
            textBox.BackColor = System.Drawing.Color.White;
        }
    }

我想把我的新代码放在else if (textBox.Text.)长度== 0)',因为我只能删除文本框中的退格文本,maxlength为1。当我退格一些东西时,我想将这个数字与box1中的所有其他文本框进行比较然后如果这个数字只等于另一个文本框,它会将另一个文本框的背景色设为白色。我不知道如何保存一个即将被删除的号码,所以如果你能帮我的话,我会很高兴的。

你用退格键删除的数字

您应该使用TextChanged事件来检测您的TextBox上的变化,并且在TextChanged结束时,您应该在TextBoxTag属性中保留当前值,并在您想要与其他值进行比较时使用它。您不应该使用TextChanged以外的任何事件,因为用户可以在不使用键盘的情况下删除或粘贴值。

例如,你可以这样写代码:

...
else if (textBox.Text.Length == 0)
{
    var previusText = textBox.Tag as string;
    var items= box1.Where(x => x.Text == previusText && !x.Equals(textBox)).ToList();
    if (items.Count()==1)
    {
        items[0].BackColor = System.Drawing.Color.White;
    }
}
//Keep previous text
textBox.Tag = textBox.Text;
...

您可以使用以下方法:

static void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    TextBox t = sender as TextBox;
    switch (e.KeyCode)
    {
        case Keys.Delete:
        case Keys.Back:
            int start = e.KeyCode == Keys.Back && t.SelectionLength == 0 ? t.SelectionStart - 1 : t.SelectionStart;
            int length = t.SelectionLength == 0 ? 1 : t.SelectionLength;
            // you can save your char right here....!
            t.Text = t.Text.Remove(start, length);
            e.SuppressKeyPress = true;
            break;
    }
}