DataGridView:セルの”文字入力不可”と”ctrl+C ”を両立
※参考URL
http://dobon.net/vb/dotnet/datagridview/textboxevent.html
http://support.microsoft.com/kb/839201/ja
http://www.atmarkit.co.jp/fdotnet/dotnettips/538dgvedit/dgvedit.html
入力はさせたく無いけど、選択コピーは許可したいんだよなぁというわけで、少し調べてみた。
サンプルソース
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { //セルが選択された瞬間、文字選択にする //ReadOnlyはFalseにしておく dgv.BeginEdit(true); } //セル編集用コントロールが表示されたとき private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridView dgv = (DataGridView)sender; //編集のために表示されているコントロールを取得 DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; //イベントハンドラを削除 tb.KeyPress -= new KeyPressEventHandler(dataGridViewTextBox_KeyPress); tb.KeyDown -= new KeyEventHandler(dataGridViewTextBox_KeyDown); //イベントハンドラを追加 tb.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress); tb.KeyDown += new KeyEventHandler(dataGridViewTextBox_KeyDown); } private void dataGridViewTextBox_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = true; } private void dataGridViewTextBox_KeyDown(object sender, KeyEventArgs e) { DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)sender; if (e.Control && e.KeyCode.ToString() == "C") { //クリップボードにコピー Clipboard.SetDataObject(tb.SelectedText.ToString()); } }
dobon.netさんは本当に偉大だ。