• ベストアンサー

VB2005 DataGridViewでセルデータ貼付後、貼付したデータの全体を選択した状態に出来ますか?

DataGridviewのセルのデータを[Ctrl]+[C]でコピーし、セルを移動し[Ctrl]+[V]でデータの貼り付けをすると、カーソルはデータ最後の文字の後にきます。 この状態を、貼り付けした文字全体を選択した状態にしたいのですが、出来ますでしょうか? よろしくお願いいたします。

  • JJ-TO
  • お礼率95% (19/20)

質問者が選んだベストアンサー

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

DataGridViewでセルが編集中の時にキーイベントを捕捉する DOBON.NET > プログラミング道 > .NET Tips > DataGridView http://dobon.net/vb/dotnet/datagridview/textboxevent.html 上記ページを参考にしてみました 動作するとは思わなかったですけど・・・なんかうまく動くみたいです^^; コピーペーストのキーイベントのみ対応しています マウスからの貼り付けには対応していません #対応するならば、ウィンドウメッセージのフックにて対応するしかないと思われます #もしくはコンテキストメニュー自体を表示させなくするとか・・・ Private _pasteFlag As Boolean = False  'ペーストフラグ ''EditingControlShowingイベントハンドラ Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing   If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then     Dim dgv As DataGridView = CType(sender, DataGridView)     Dim tb As DataGridViewTextBoxEditingControl = CType(e.Control, DataGridViewTextBoxEditingControl)     RemoveHandler tb.KeyDown, AddressOf dataGridViewTextBox_KeyDown     RemoveHandler tb.TextChanged, AddressOf dataGridViewTextBox_TextChanged     If dgv.CurrentCell.OwningColumn.Name = dgv.Columns(0).Name Then       '特定カラムのみ       AddHandler tb.KeyDown, AddressOf dataGridViewTextBox_KeyDown      'キーダウンイベント       AddHandler tb.TextChanged, AddressOf dataGridViewTextBox_TextChanged  'テキスト変更後イベント     End If   End If End Sub ''キーダウン Private Sub dataGridViewTextBox_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)   If e.Control AndAlso e.KeyCode = Keys.V Then     Me._pasteFlag = True   End If End Sub ''テキスト変更後 Private Sub dataGridViewTextBox_TextChanged(ByVal sender As Object, ByVal e As EventArgs)   If Me._pasteFlag Then     Dim tb As DataGridViewTextBoxEditingControl = CType(sender, DataGridViewTextBoxEditingControl)     tb.SelectAll()     Me._pasteFlag = False   End If End Sub

JJ-TO
質問者

お礼

回答ありがとうございました。出来ました! 参考ページは何度も見ていたのですが、コードにすることが出来なくて困っていました。 もっと、頑張って勉強します。

関連するQ&A

  • DataGridViewのカレントセル内の文字列を選択状態にする方法

    DataGridViewのカレントセル内の文字列を選択状態にする方法をご存知の方いませんでしょうか? セルにカーソルを移動することはできましたが、 移動先セル内の文字列全てを選択状態とすることができません。

  • VB2005 DATAGRIDVIEWでの矢印キーの制御について

    お世話になります。 VB2005で開発しています。 DATAGRIDVIEW内の矢印キーを制御できないものかという質問です。 セルが1行に2個あります。 2個目のセルにカーソルを合わせて、文字の最後から←を一つずつ押していくと、カーソルが一文字ずつ前に移動し、先頭に来た状態で、←を押すと、1個目のセルにカーソルが移動してしまいます。 セルの先頭にカーソルがある場合、←を押しても移動しない方法ってあるのでしょうか? よろしくお願いします。

  • VB2005 DataGridViewの編集不可項目にただちに入力する方法はありますか?

    vb2005で開発中です。 DataGridViewのセルが Me.DataGridView1.CurentCell.ReadOnly = True で、編集不可としています。その項目にカーソルがある状態で、入力を開始したら、編集可能となり、その値がただちに反映させる方法はありますでしょうか? ・なにかキーを一度押して(KeyPress)から、 Me.DataGridView1.CurentCell.ReadOnly = False にする方法ならば、簡単ですが、そのなにかキーを押す手間を省きたいです。 ・また、なぜ一度 Me.DataGridView1.CurentCell.ReadOnly = True の状態にしたいかというと、 Me.DataGridView1.CurentCell.ReadOnly = False Me.DataGridView1.BeginEdit(True) で、編集可能し、全体を選択した状態で、右矢印を押すと、文字の最後にカーソルが来てしまい、次のセルに移動しないからです。 つまり、やりたいことは、セル上にカーソルがある時、右矢印を押したら、右のセルに移動。また、セル上にカーソルがある時、直接入力したいのです。 他の方法でも何かいい方法がありましたら、お教え下さい。 よろしくお願いいたします。

  • DataGridViewの特定のセルで選択状態を保ちたい VB2005

    DataGridViewの件で質問したいのですが。 よろしくお願いします。 VB2005で、DataGridViewの特定のセルでカーソルがとどまる(選択状態)ようにしたいのですが 思ったように動いてくれません。例えば、下のようなDataGtridViewがあったとして, 例 ------------------ |ID | X | Y | ------------------ |001| 100 | | ------------------ |002| 150 | | ------------------ |003| 105 | | ------------------ ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを 表示させて、そのセルにカーソルがとどまる処理を作りたいのですが。下の行のセルに 移動してしまいます。  DataGridView_CellEndEditイベントやDataGridView1_CellValueChangedなどで カーソルがとどまる処理をしているつもりなのです下の行に移動してしまいます。 DataGridViewの初期設定の問題でしょうか? Private Sub DataGridView1_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged Dim DgvRow As Integer '行をセット DgvRow = e.RowIndex ' X と Yが異なれば、メッセージ表示 If DataGridView1("X", e.RowIndex).Value <> DataGridView1("Y", e.RowIndex).Value Then MsgBox("X <> Y", MsgBoxStyle.OkOnly) Me.DataGridView1.CurrentCell = Me.DataGridView1("Y", DgvRow) ' これも駄目だった ↓ 'Me.DataGridView1.CurrentCell = Me.DataGridView1("Y", e.RowIndex - 1) End If End Sub アドバイスいただけたら幸いです。よろしくお願い致します。 開発環境 VB2005 Visual Studio 2005 Standard Edition(SP1) Windows XP Pro SP2

  • VB2005 DataGridView で選択状態(青色反転)

    DataGridViewの件で質問したいのですが。 よろしくお願いします。 VB2005で、DataGridViewの特定のセルが選択されて値が青色反転した Selectイベントのような状態にしたいのですが。 例えば、下のようなDataGtridViewがあったとして, 例 ------------------ |ID | X | Y | ------------------ |001| 100 | | ------------------ |002| 150 | | ------------------ |003| 105 | | ------------------ ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを 表示させて、そのセルを青色反転させる処理を作りたいのですが。下の行のセルに 移動してしまいます。 そこで下記のようなコードを書きました。 Private Sub DataTable1DataGridView_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataTable1DataGridView.CellValidating If e.ColumnIndex <> Me.DataTable1DataGridView.Columns("Y").Index Then Exit Sub If Me.DataTable1DataGridView("X", e.RowIndex).Value IsNot Nothing AndAlso _ Me.DataTable1DataGridView.EditingControl IsNot Nothing Then If Not Me.DataTable1DataGridView("X", e.RowIndex).Value.ToString.Equals(Me.DataTable1DataGridView.EditingControl.Text) Then MsgBox("X <> Y", MsgBoxStyle.OkOnly) Me.DataTable1DataGridView.BeginEdit(True) 'e.Cancel = True End If End If End Sub e.cancel = True だとセルにはとどまりますが。セルが選択状態にはなりません。 BeginEdit(True)を使うと下のセルが選択状態になります。 アドバイスいただけたら幸いです。よろしくお願い致します。 開発環境 VB2005 Visual Studio 2005 Standard Edition(SP1) Windows XP Pro SP2

  • DataGridViewのセル選択について

    VB2005でDataGridViewを用い、編集できるセルと編集できないセルを設けています。 編集できないセルは、セルの選択自体出来ないようにしたいのですが、 そのようなことは可能なのでしょうか? タブキーで移動した場合も、入力不可としているセルを飛ばして移動したいのです。 ぜひお教えください。 よろしくおねがいいたします。

  • VB2008 DataGridViewからエクセルに貼り付けるとエクセルが落ちます

    質問させていただきます.どうぞよろしくお願いいたします.  DataGridViewの値をExcelにコピペしようとすると文字化けしてしまうのですが, 皆さんどうのように対処してらっしゃいますか??? どうも原因が,Excel貼り付け時にHTMLで解釈されてしまうみたいで Excel上で毎回,右クリック→形式を選択して貼り付け とすると 文字化けしなくなりますが,忘れてそのまま貼り付けるとExcelファイル自体が 強制シャットダウンしてしまうので恐ろしくて使えません. 他に何かよい方法はないものでしょうか?  予めDataGridView上のフォーマットをテキストにしておくか, コピーされた際に勝手にクリップボードのフォーマットを変更できればいいのですが...  もしお詳しい方がいらっしゃいましたら,ぜひアドバイスいただけないでしょうか. どうぞよろしくお願いします.

  • Excelで表全体を選択する

    表中でどこかのセルを選んだ状態で、[Ctrl]キーと[*]を押せば、表全体が 選択できると思うのですが、"現在時刻"が選択したセルに挿入されます。 [Ctrl]+ [*]で表全体を選択できるようにする操作方法を教えてください。

  • EXCEL2003 選択した範囲のデータの入れ替え

    はじめまして。Excel2003を使っています。 離れたセルを複数選択して(A1~D1)と(C6~D6)双方のデータを入れ替えることはできるでしょうか? ちなみに(A1には数字・文字のデータ B1~D1はセルの色づけだけ)同様に(C6に数字・文字データ B6~D6はセルの塗りつぶしだけ)の入れ替えです。 現在は、コピーして離れたセルに貼り付けてを繰り返して双方を入れ替えしてます。 VBAでコード表を作る能力がありませんので、作っていただければ助かります。 A範囲選択 Ctrl B範囲選択  Enter でデータの入れ替えができれば使いやすいのですが・・・ はじめての質問で説明が解りにくいかもしれませんがよろしくお願いします。

  • テキスト・データをエクセルの結合セルに貼り付けたい

    メモ帳などのテキストデータをエクセルに貼り付ける際,文字列をコピーしたあと,エクセルに「貼り付け」(Ctrl + V)で行なえますが,セルが結合された状態で「貼り付け」(Ctrl + V)を行なうと,エラーメッセージが出てしまい,一度F2キーを押したあとに(Ctrl + V)を行なわないと貼り付けができません。違う方法はありませんでしょうか?何かコマンドがあれば,クイック・アクセス・ツール・バーに登録するなどして簡略化したいと考えているのですが…。

専門家に質問してみよう