■76773 / ) |
Re[3]: DataGridViewで改行も含めたデータを貼付する方法 |
□投稿者/ 魔界の仮面弁士 (443回)-(2015/08/12(Wed) 15:43:28)
|
2015/08/12(Wed) 15:49:26 編集(投稿者)
■No76771 (赤いガチャピン さん) に返信 > どのイベントの時に上記サイトのコードを行えばいいのかわからないでいます。 まずは Button などを貼って、そこから呼び出すことを検討してみては如何でしょう? 呼び出し方も大事ですが、今回の本題は「貼り付け処理」の実装にあるわけですし。
> 右クリックからのやり方がわからないのでご教授ください。 コンテキストメニューを自作する方法は、下記を参照してみて下さい。 http://dobon.net/vb/dotnet/control/contextmenu.html
もし、標準のコンテキストメニューの「貼り付け」や「Shift + Insert」や「Ctrl + V」に 反応させる場合は、少々面倒ですが WM_PASTE を捉える必要があると思います。
> http://dobon.net/vb/dotnet/system/clipboardformats.html > のサイトを参考に調べてみようと思うのですが・・・ そこに書かれているように、IDataObject.GetFormats() で良いと思いますよ。 実際にクリップボード内のデータを取り出すときには、 そのサイトに書かれている内容を利用することになるでしょうね。
ただ、マネージオブジェクト化される時点で、多少の変換が入ってしまいますので、 調査段階においては、私はクリップボードビューワーの類を併用するようにしています。 たとえば、こういったツールで。(そこまでする必要は無いのかもしれませんが、一応念のため) http://www.officedaytime.com/clipmm/ http://www.forest.impress.co.jp/docs/review/20140423_645708.html
> データ型は調べてなにか対応したほうがいいのでしょうか?
私が提示した URL のコメント欄にも書いていますが、たとえば DataGridView.GetClipboardContent でコピーしたデータの場合、 ・HTML データ ・Unicode テキスト データ ・テキストデータ ・ロケール情報 ・OEM テキスト データ などが同時に含まれます。(この他、CSV データも含まれます)
その中のどのデータを取り出すのかは、開発者側で優先順位付けが必要ですし、 そのデータで「改行を含んだセル」がどのように扱われているのかも あらかじめ確認が必要になるかと思います。
また、今回のクリップボードデータには複数の行が含まれているそうですが、 貼り付け先の DataGridView で「複数のセル範囲」が非連続的に選択されていた場合 (たとえば、Excel で言えば、A2:C3 と G1:H10 が同時に選択されている状況など) どのように貼り付けが行われるべきかも考慮せねばならないでしょう。
その他、DataGridView 側の行数と、貼り付けるデータの行数が 一致しない場合の振る舞いについても考えないといけませんね。
|
|