如何启用 copy-paste 从 Excel 到自定义 DataGridView?

How to enable copy-paste from Excel into custom DataGridView?

我试图在我自己的环境中解决这个老问题,采用了很多不同的解决方案,但仍然没有成功。
我有一个名为 EntryGridUser Control,它有一个 DataGridView,它是 headers,这些都是在代码中设置的。然后有一个表格,上面有一个 EntryGrid
我知道 excel 列必须准备好能够将所有单元格粘贴到一行中,为此我使用了这个解决方案:copypaste,复制部分除外。这是我家的样子:

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 是表单上用户控件的名称,但它没有任何 EditingControlShowing 事件,只有 DataGridView 有,但我不能这样使用:EntryGrid4.DataGrid.EditingControlShowing
我在 EntryGrid (Public Event EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs)) 中创建了一个活动,但一切都变了。
我可以将剪贴板中的任何内容粘贴到单元格中,但在我开始修改之前这是可能的。 谢谢你的想法!

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);
}