2017-03-02 57 views
0

C#,WinForms移動DataGridView1.CurrentCell和BeginEdit不起作用。如果我使用Tab#

也許這是一個愚蠢和微不足道的問題,但我不能出去! 我有一個DataGridView1 4列。我檢查列1中每行的值是否與列2中前一行的值相同。如果是,則顯示一個MessageBox告訴我...並且我想將焦點置於其中的單元格有剛剛輸入的雙重值。因此我寫了這段代碼:

private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs cella) 
{ 
    if (cella.RowIndex > 0 && cella.ColumnIndex == 1) 
    { 
     var PrevCell = DataGridView1.Rows[cella.RowIndex - 1].Cells[2].Value.ToString(); 
     if (DataGridView1.Rows[cella.RowIndex].Cells[cella.ColumnIndex].Value.ToString() == PrevCell) 
     { 
      MessageBox.Show("Amount already exists. Change the current value or the previous occurrence", "Double value, already inserted", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
      DataGridView1.CurrentCell = DataGridView1.Rows[cella.RowIndex].Cells[cella.ColumnIndex]; 
      DataGridView1.BeginEdit(true); 
      //only a test: 
      //return; 
      } 
     } 
    } 
} 

CurrentCell工作正常。問題是,當我按下Tab鍵移動到下一個單元格(或者我用鼠標點擊下一個單元格),因此即使BeginEdit將我置於右側,也會發生CellEndEdit事件單元格讓我編輯該值,只要我再次按下Tab鍵,它將在下一個單元格中移動已更改的值。看起來在顯示MessageBox之前按下的Tab仍保留在內存中。

當我正在寫一個雙精度值,消息框出現 When I'm writing a double value, and MessageBox appears

當CurrentCell和BeginEdit導致我在正確的細胞改變雙重價值 When the CurrentCell and BeginEdit lead me in the correct cell to change the double value

在活動結束

At the end of the Event

如何處理這個問題的任何想法?

+0

什麼是消息框的翻譯? –

+0

我只在代碼中的MessageBox中翻譯了它:'Quantitàgiàpresente。 Modifica l'attuale valore o l'occorrenza precedente' ='金額已經存在。當Valore doppio,giàinserito' ='Double value,already inserted'時,改變當前值或前一個事件。 – Wiccio

回答

1

您需要選擇該單元並在之後調用BeginEdit方法CellEndEdit事件發生。要做到這一點,將該代碼包裝在BeginInvoke塊中:

this.BeginInvoke(new Action(() => { 
    DataGridView1.CurrentCell = DataGridView1.Rows[cella.RowIndex].Cells[cella.ColumnIndex]; 
    DataGridView1.BeginEdit(true); 
})); 
+0

我從來沒有使用'Begin.Invoke'方法和代理'Action'直到現在......但是我必須更好地研究它,因爲您的解決方案能夠工作!非常感謝。 ;-) – Wiccio