当我删除带有退格键的文本框中的数字时,我想保存该数字,以便我可以将其与其他文本框中的其他数字进行比较。我怎么做? 这是我想要的代码:
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.Length == 0)'中,因为我只能在文本框中删除带有退格的文本,并且maxlength为1。 当我退格时,我想将该数字与box1中的所有其他文本框进行比较,然后如果该数字仅等于另一个文本框,则会使其他文本框返回白色。我不知道如何保存一个即将被删除的号码,所以如果你能帮助我,我会很开心。
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
您应该使用TextChanged
事件来检测TextBox
上的更改,并且在TextChanged
结束时,您应该保持当前值,例如Tag
TextBox
属性TextChanged
1}}并在想要将其与其他值进行比较时使用它。您不应使用...
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;
...
以外的任何事件,因为用户可以在不使用键盘的情况下删除或粘贴值。
例如,您可以编写如下代码:
var data = [
{"itemName": "item1", "Jan": "4056479", "Feb": "3716377", "Mar": "6924148"},
{"itemName": "item2", "Jan": "3034448", "Feb": "930077", "Mar": "1210250"},
{"itemName": "item3", "Jan": "3938924", "Feb": "1624727", "Mar": "9626947"}
];