2016-10-20 2 views
1

Я пытаюсь решить эту добрую старую проблему в своей собственной среде, адаптировал множество различных решений, но все равно не добился успеха.
У меня есть User Control с именем EntryGrid, у которого есть DataGridView, его заголовки и такие вещи заданы в коде. Тогда есть форма, на которой есть EntryGrid.
Я знаю, что колонки excel должны быть готовы к вставке всех ячеек в строку, для этого я использовал это решение: copypaste, за исключением копии. Вот как это выглядит на моем месте:
Как включить copy-paste из Excel в пользовательский DataGridView?

Private Sub EntryGrid_KeyDown(sender As Object, e As KeyEventArgs) Handles EntryGrid4.KeyDown, EntryGrid8.KeyDown, EntryGrid16.KeyDown, EntryGrid32.KeyDown 
     e.Handled = True 
     Dim entryGrid As EntryGrid = sender 
     Dim dataGrid As DataGridView = entryGrid.DataGrid 
     If (e.Control And e.KeyCode = Keys.V) Then 
      MessageBox.Show("Success")    'for now 
     End If 
End Sub 

Это абсолютно не работает для меня. Я даже установил KeyPreview в True в форме, но ничего не происходит никогда.
Тогда я попытался this solution, мину с любым результатом:

Private Sub EntryGrid_EditingControlShowing(sender As System.Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles EntryGrid4.EditingControlShowing 
     AddHandler e.Control.KeyDown, AddressOf cell_KeyDown 
    End Sub 

    Private Sub cell_KeyDown(sender As Object, e As KeyEventArgs) 
     If e.KeyCode = Keys.V Then 
      MessageBox.Show("Success") 
     End If 
    End Sub 

EntryGrid4 является имя UserControl на форме, но он не получил никакого EditingControlShowing события, только DataGridView имеет, но я не могу использовать, как это : EntryGrid4.DataGrid.EditingControlShowing
Я создал событие в EntryGrid (Public Event EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs)), но ничего не изменилось.
Я могу вставить что-либо из буфера обмена в ячейку, но это было возможно, прежде чем я начал изменять. Спасибо за любую идею!

+0

В чем проблема? Это просто вставка значения в ячейку, которая находится в режиме редактирования или что-то еще? Перепишите вопрос и сделайте его более понятным и удалите части, которые не связаны с проблемой. Например, если вопрос заключается в вставке из буфера обмена в ячейку в режиме редактирования, вы должны определить, как вы хотите вставить, используя сочетание клавиш или с помощью меню. Кроме того, это то, о чем вы просите, вам не нужно описывать структуру пользовательского контроля или столбцы excel и т. Д. Пожалуйста, держите вопрос простым и конкретным. –

+0

Проблема в том, что любая из двух попыток работает, если вы можете помочь в одном, пожалуйста, сделайте это. Я бы хотел использовать Ctrl + V. – monami

ответ

3

ProcessCmdKey способ вашего UserControl - это то, что вы ищете. Переопределите его и проверьте на Ctrl + V и выполните то, что вам нужно. Например:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == (Keys.Control | Keys.V)) 
    { 
     if (dataGridView1.EditingControl != null) 
      dataGridView1.EditingControl.Text = Clipboard.GetText(); 
     else if (dataGridView1.CurrentCell != null) 
      this.dataGridView1.CurrentCell.Value = Clipboard.GetText(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+0

Вау, это было так полезно! Я перевел на Visual Basic и поместил код обработки строки excel, и он сработал. Большое спасибо за поднятие этого подхода processCmdKey, любой другой источник не упомянул об этом в связи с copypasting из excel в datagridview. – monami

+0

К сожалению, я полностью пропустил тег VB.NET. Добро пожаловать :) –

+0

Я уже делал это вчера, моя стрелка вверх теперь оранжевая;) – monami

Смежные вопросы