private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)<br /> {<br /> //if (dataGridView1.CurrentCell.ColumnIndex == 1)<br /> {<br /> TextBox tx = e.Control as TextBox;<br /> // Remove an existing event-handler, if present, to avoid<br /> // adding multiple handlers when the editing control is reused.<br /> tx.KeyPress -= new KeyPressEventHandler(tx_KeyPress);<br /> tx.KeyPress += new KeyPressEventHandler(tx_KeyPress);<br /> }<br /> }<br /> // Only numeric and Backspace key is valid<br /> private void tx_KeyPress(object sender, KeyPressEventArgs e)<br /> {<br /> if (!(char.IsNumber(e.KeyChar) || e.KeyChar == '/b'))<br /> e.Handled = true;<br /> }
其中,第8行代碼的意義在於移除之前可能訂閱過的KeyPress事件,防止同一事件被多次訂閱
MSDN詳細說明:
The DataGridView control hosts one editing control at a time, and reuses the editing control whenever the cell type does not change between edits. When attaching event-handlers to the editing control, you must therefore take precautions to avoid attaching the same handler multiple times. To avoid this problem, remove the handler from the event before you attach the handler to the event. This will prevent duplication if the handler is already attached to the event, but will have no effect otherwise. For more information, see the example code in the DataGridViewComboBoxEditingControl class overview.