2015-10-14 43 views
1

当我使用退格键删除文本框中的数字时,我想保存该数字,以便将其与其他文本框中的其他数字进行比较。我怎么做? 这就是我想要把它放在代码:使用退格键删除的号码

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

我希望把我的新代码“否则,如果(textBox.Text.Length == 0)”,因为我只能删除与退格文本在我的文本框和最大长度为1. 当我退格的东西,我想比较这个数字与box1中的所有其他文本框,然后如果该数字等于只有一个其他文本框,它会使该其他文本框背白色。我不知道如何保存一个即将被删除的号码,所以如果你能帮助我,我会非常开心。

+1

可以存储先前值(作为字段),当'TextChanged'是惜售你可以把以前的值,检查是否有一个数量少,等等。或者您可以使用另一个事件(例如'KeyDown')来检测按下Backspace时的时间。 – Sinatr

+0

你想比较密码什么的? –

+1

您应该使用'TextChanged'事件,并且在'TextChanged'结束时,您应该将当前值保存在您的'TextBox'的'Tag'属性的某个位置,并在您想将其与其他值进行比较时使用它。除了'TextChanged'之外,您不应该使用任何事件,因为用户可以在不使用键盘的情况下删除或粘贴值。 –

回答

1

您应该使用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; 
... 
+1

这段代码只会让变成白色的盒子,而不是与它相等的盒子。而且我已经修复了无法在没有键盘或ctrl + a或ctrl + z的情况下删除或粘贴值,因此您不必担心这一点。 – Percutient

+1

@Percutient这是主要想法,你可以改变它的意愿:)我不读你的所有代码。正如我所看到的,您知道如何使用linq来很好地找到控件,因此只需更改代码并将其弯曲成您的意愿即可。 –

+0

@Percutient,但你的主要想法是使用'TextChanged'事件并保留'Tag'中的前一个值。 –

1

你可以使用这种方法:

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

也许用户不使用退格键或删除键删除字符,只选择文本并键入/粘贴新字符。解决方案必须处理所有情况。 –

相关问题