2012-05-09 31 views
1

我想在DataGridView中的10個人之間劃分30個整個蘋果。
DataGridView位於KeyPreview設置爲true的窗體中。人員名稱顯示在設置爲只讀的DataGridViewTextBoxColumn(Column1)中。然後整數將被輸入到一個空的DataGridViewTextBoxColumn(Column2)。 當一個鍵被釋放時,總和被計算/重新計算,並且如果column2的總和爲30,那麼表單OK按鈕被啓用(其他被禁用)。KeyPress事件塊DataGridView中的KeyUp事件.net

問題是關於keyEvents。如果綁定KeyPress事件,則不會觸發KeyUp。

// Bind events to DataGridViewCell 
    private void m_DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (e.Control != null) 
     { 
      e.Control.KeyUp -= m_DataGridView_KeyUp; 
      e.Control.KeyPress -= m_DataGridView_KeyPress; 
      e.Control.KeyUp += m_DataGridView_KeyUp; 
      e.Control.KeyPress += m_DataGridView_KeyPress; 
     } 
    } 

    //Only accept numbers 
    private void m_GridView_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8) 
     { 
      e.Handled = false; 
     } 
     else 
     { 
      e.Handled = true; 
     } 
    } 

    // Sum the apples in column2 
    private void m_DataGridView_KeyUp(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == 1 && e.RowIndex > 0) 
     { 
      int count = 0; 
      int parser = 0; 

      foreach (DataGridViewRow item in this.m_DataGridView.Rows) 
      { 
       if (item.Cells[1].Value != null) 
       { 
        int.TryParse(item.Cells[1].Value.ToString(), out parser); 
        count += parser; 
       } 
      } 

      //make the ok button enabled 
      m_buttonDividedApplen.Enabled = (count == 30); 
     } 
    } 

這個故事問題變得陌生和陌生。如果我切換單元格,那麼觸發按鍵事件。有時鍵盤會觸發一次。

+0

KeyUp並不總是或只有在按鍵處理時才執行? – gbianchi

+0

只有在未附加KeyPress的情況下才執行KeyUp。 –

回答

0

我相信,每次編輯控件觸發時,您都會將處理程序重新附加到相同的事件上,而這絕對是永遠不會改變的。

我認爲如果你跨過你的代碼,你會發現KeyPress事件會直接與你編輯單元格的次數成正比。先嚐試刪除處理程序:

e.Control.KeyUp -= m_DataGridView_KeyUp; 
    e.Control.KeyPress -= m_DataGridView_KeyPress; 

然後重新連接:

e.Control.KeyUp += m_DataGridView_KeyUp; 
    e.Control.KeyPress += m_DataGridView_KeyPress; 

,看看是否KEYUP火災。

+0

那麼我也試過。結果完全一樣。處理程序的重新連接不會改變結果。 –

+0

啊,對不起,沒有幫助。不過,你可能不應該像這樣繼續重新連接處理程序,因爲你的KeyPress事件會無意中觸發多次。 –

+0

另外,我不清楚爲什麼您啓用了主窗體的KeyPreview。在設計時只將處理程序附加到數據網格並不處理表單級別的按鍵事件是否可行? –