2015-10-14 63 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

也許用戶不使用退格鍵或刪除鍵刪除字符,只選擇文本並鍵入/粘貼新字符。解決方案必須處理所有情況。 –

相關問題