2016-10-20 18 views
1

私は自分の環境でこの古い問題を解決しようとしています。
EntryGridというUser Controlがあります。DataGridViewというヘッダーがあり、そのようなものがコードに設定されています。次に、EntryGridがドロップされたフォームがあります。
Excelの列は、すべてのセルを行に貼り付けることができるように準備されている必要があることがわかります。このために、このソリューションを使用しました。コピー部分を除いてcopypasteです。これは私の場所でどのように見えるかです:これは絶対に私のために働いていない
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 

。私はさらにKeyPreviewTrueに設定していますが、何も起こりません。
は、それから私は、どんな結果に鉱山、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
EntryGridPublic Event EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs))にイベントを作成しましたが、何かが変更されました。
クリップボードからセルに何かを貼り付けることができましたが、変更を開始する前に可能でした。 ありがとうございます!

+0

問題は何ですか?編集モードにあるセルなどの値を貼り付けるだけですか?問題に言い換えて、より明確にして問題に関連していない部分を削除してください。たとえば、クリップボードから編集モードでセルに貼り付けることについて質問がある場合は、キーボードショートカットやメニューを使用して貼り付けたい方法を決定する必要があります。また、あなたが求めているのは、ユーザーの制御構造やExcelの列などを説明する必要はありません。質問は簡単で具体的なものにしてください。 –

+0

問題は2つの試みのいずれかがうまくいくことです。私は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のアプローチを高くしていただきありがとうございます。他のどのソースからも、datagridviewにExcelからコピーすることに関しては言及していませんでした。 – monami

+0

おっと、私は完全にVB.NETタグを逃した。あなたは歓迎です:) –

+0

私はすでに昨日それをしました、私の上向きの矢印は今です;) – monami

関連する問題