Вопрос по ctrl+c + DataGridView + TextBox
От: Albatross  
Дата: 15.10.14 06:15
Оценка:
Привет.
Есть у меня 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.