『プログラミング C#』 ListViewに表示されている項目をエクスプローラにドラッグ&ドロップする

そのものズバリがGoogleで見つからなかったので、メモ。

ListViewに表示されている項目、具体的にはディレクトリをエクスプローラにドラッグ&ドロップしてディレクトリの移動を行いたいのです。

1個の項目をドラッグ&ドロップする

ItemDragイベントに実装すればOKです。

まず、ListViewに追加されているディレクトリ名を取得するには、
[csharp]
string path;
ListViewItem itemx = new ListViewItem();
itemx = listView1.SelectedItems[0];
path = itemx.SubItems[1].Text;
[/csharp]
となります。リストビューから取得されているディレクトリは2個目の項目に追加している情報を使っています。

つぎ、それをドラッグ&ドロップするには
[csharp]
string[] paths = {path}
DataObject dataObj = new DataObject(DataFormats.FileDrop, paths);
DragDropEffects effect = DragDropEffects.Move;
listView1.DoDragDrop(dataObj, effect)
[/csharp]
です。移動したいのでDragDropEffects はDragDropEffects.Moveだけを指定してますが、コピーもしたければorで指定していきます。

複数項目をドラッグ&ドロップする

じゃ、複数項目をドラッグ&ドロップするにはとなりますが、listView.SelectedItems.Countで選択している個数を取得できる事を利用して、
[csharp]
ListViewItem itemx = new ListViewItem();
int SelectedCount = listView1.SelectedItems.Count;
for (int i=0; i < SelectedCount; i++){ itemx = listView1.SelectedItems[i]; path = itemx.SubItems[1].Text; } [/csharp] で選択項目それぞれのディレクトリ名を取得できます。 DataObjectをnewするときには、string型の配列が必要なのですが、そこをどうすれば良いかというと、ArrayListを使ってやれば良いみたいです。
[csharp]
ArrayList pathList = new ArrayList();
pathList.Add(path);

string[] paths = (string[])pathList.ToArray(typeof(string));
[/csharp]
みたいな感じです。

全体をまとめると
[csharp]
ArrayList pathList = new ArrayList();
string path;

ListViewItem itemx = new ListViewItem();
int SelectedCount = listView1.SelectedItems.Count;
for (int i=0; i < SelectedCount; i++){ itemx = listView1.SelectedItems[i]; path = itemx.SubItems[1].Text; pathList.Add(path); } string[] paths = (string[])pathList.ToArray(typeof(string)); DataObject dataObj = new DataObject(DataFormats.FileDrop, paths); DragDropEffects effect = DragDropEffects.Move; listView1.DoDragDrop(dataObj, effect); [/csharp] のようなコーディングになります。

ドラッグ&ドロップ後にListViewから項目を削除する

ドラッグ&ドロップ後にListViewから項目を削除するようにしたいと思ったら、こんな感じでできました。
[csharp]
for (int i = SelectedCount -1; i > -1; i–)
{
listView1.Items.Remove(listView1.SelectedItems[i]);
}
[/csharp]

まとめ

このような感じでドラッグ&ドロップを実装しましたが、もっとスマートな方法があったらコメント欄にコメントお願いします。

Microsoft Visual Studio Professional 2012 通常版
マイクロソフト (2012-09-21)
売り上げランキング: 150

『プログラミング』 C#はじめました

自宅でたまに行う定型作業、主にファイルサーバーの整理ですが、ファイルサーバーにログインをしてスクリプトで作業したり、エクスプローラ上で作業をしたりとしていました。

が、煩雑で一つのアプリから統一して管理、操作、実行できないかなと思っていました。
そうなると、Windowsでアプリを作成するのが一番の早道。

では、そのプログラミング言語として何が良いかなと考えたり質問してみた結果、GUIアプリということなので、C#を使ってみました。
具体的にはVisual Studio C#。
元々わたしはDelphi使いだったこともあって、C#はすんなり取り組むことができました。

C#はDelphiの開発チームが開発に関わったということもあり、スムーズに使えました。
約1時間で所望のアプリケーションができました。
もっとも、細かくブラッシュアップしていくのに凄い時間が掛かるのですがw

というわけで、C#をはじめました。
自分のメモとしてC#のTipsも追加していこうと思っています。

独習C# 第3版
独習C# 第3版

posted with amazlet at 13.01.23
ハーバート・シルト
翔泳社
売り上げランキング: 12,741

『読書感想文?』Xcode 4 完全攻略

MacでXCodeを使ってプログラミングもチョコチョコやっているんだけども、XCode4の使い方がよくわからん!、WEBにも(日本語の)情報が少なすぎ!って嘆いていました。
ヨドバシカメラ梅田の書籍コーナーで本を物色していたところ、Xcode 4 完全攻略と言う本の中身が良さそうなので、購入&勉強してました。

Xcode 4 完全攻略
Xcode 4 完全攻略

posted with amazlet at 12.07.29
STUDIO SHIN
ソフトバンククリエイティブ
売り上げランキング: 9821

結果は大正解。この本でXCode4の使い方がだいたい解りました。

本書で取り上げているサンプルプログラムを作りながら操作方法を勉強していったんですが、解りやすくて良かった。
ただ、本の通りにサンプルプログラムを作ったはずだけども完成したものは別物になった・・・・
サブViewがメインViewと入れ替わってしまったまま直らない・・・・。

XCode4を使ってみて個人的にGoodとおもったことは、Gitと融合されていること。リビジョン管理がローカルPCでできるので、小まめにcommitしておけばコーディングで失敗してもさかのぼれるし。

iPhoneプログラミングというか、Objective-Cプログラミング、Androidプログラミングに比べてコーディング量が多いと思ったんだけど、他の人はどう思っているんだろうか。
メソッドのリンクとか、色々めんどくさいことが多いなぁと思うこと多し。

そして、Objective-Cは謎言語だなぁ。smalltalkからの影響を強く受けているらしいけど、smalltalkって知らないからなw

本書は、XCode4の使い方に絞った内容なので、Objective-CやiOSプログラミングに関しては、別途参考書が必要になります。
お薦めな本って何かないですかね

詳解 Objective-C 2.0 第3版
詳解 Objective-C 2.0 第3版

posted with amazlet at 12.07.29
荻原 剛志
ソフトバンククリエイティブ
売り上げランキング: 3248