Привет.
Есть у меня ReadOnly DataGridView, по клику на ячейке я в месте ячейки рисую ReadOnly textbox для удобства копирования фрагментов текста в буфер обмена.
При этом у TextBox Parent — это DataGridView.
Все бы хорошо, но только вот когда в текстбоксе, выделив текст, нажимаешь Ctrl+C, в буфер обмена копируется ячейка целиком из DataGridView, т.е. по сути событие Ctrl+C обрабатывает DataGridView, а не TextBox. Можно ли это как-нибудь исправить?
Вот, собственно, сам код:
c_event_grid это DataGridView
private void c_event_grid_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
int lft = 0;
for (int i = 0; i < e.ColumnIndex; i++)
lft += c_event_grid.Columns[i].Visible ? c_event_grid.Columns[i].Width : 0;
int tp = 0;
for (int i = 0; i < e.RowIndex ; i++)
tp += c_event_grid.Rows[i].Visible?c_event_grid.Rows[i].Height:0;
ClearBox();
copy_box = new TextBox(); // private TextBox copy_box;
copy_box.ReadOnly = true;
copy_box.Multiline = true;
copy_box.Left = 1+lft ;
copy_box.Top = 1+tp;//= rct.Top;
copy_box.Width = c_event_grid.Columns[e.ColumnIndex].Width-2;
copy_box.Height = c_event_grid.Rows[e.RowIndex].Height-2;
if (copy_box.Height + copy_box.Top > c_event_grid.Height)
{
copy_box.Height = c_event_grid.Height - copy_box.Top;
copy_box.ScrollBars = ScrollBars.Vertical;
}
copy_box.Text = c_event_grid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
copy_box.Parent = c_event_grid;
copy_box.Visible = true;
copy_box.BackColor = System.Drawing.SystemColors.Control;
copy_box.BorderStyle = System.Windows.Forms.BorderStyle.None;
copy_box.Show();
}
catch (Exception ex)
{
prjclReportError.ReportError(ex);
}
}
private void ClearBox()
{
if (copy_box != null)
{
copy_box.Visible = false;
copy_box = null;
}
}
ClearBox вызывается еще при скролле DataGridView и прочих операциях, чтобы убрать TextBox.