【C#】ListViewの項目を別のListViewへ追加する
おはようございます。
今回は ListViewに表示したフォルダ、ファイルを別の ListView に移す(コピー)してみたいと思います。
プログラムは前回のものを流用します。
スポンサーリンク
画面修正

「追加」、「削除」、「追加項目をクリア」ボタンと、別のListViewを追加します。
ボタンにはそれぞれ「Click」イベントを追加。
プログラム修正
既存処理の修正
起動時の処理時に、追加したListViewのイメージリスト、ヘッダーを設定します。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |         /// <summary>         /// 起動時の処理         /// </summary>         publicForm1()         {             InitializeComponent();             // イメージリストの設定             SHFILEINFO shFileInfo=newSHFILEINFO();             IntPtr imageListHandle=SHGetFileInfo(String.Empty,0,outshFileInfo,(uint)Marshal.SizeOf(shFileInfo),SHGFI_SMALLICON|SHGFI_SYSICONINDEX);             // TreeView             SendMessage(treeView1.Handle,TVM_SETIMAGELIST,newIntPtr(TVSIL_NORMAL),imageListHandle);             // ListViewFrom             SendMessage(listView1.Handle,LVM_SETIMAGELIST,newIntPtr(LVSIL_SMALL),imageListHandle);             // ListViewTo             SendMessage(listViewTo.Handle,LVM_SETIMAGELIST,newIntPtr(LVSIL_SMALL),imageListHandle);             // ドライブ一覧を走査してツリーに追加             foreach(Stringdrive inEnvironment.GetLogicalDrives())             {                 // アイコンの取得                 inticonIndex=0;                 IntPtr hSuccess=SHGetFileInfo(drive,0,outshFileInfo,(uint)Marshal.SizeOf(shFileInfo),SHGFI_SYSICONINDEX);                 if(hSuccess!=IntPtr.Zero)                 {                     iconIndex=shFileInfo.iIcon;                 }                 // 新規ノード作成                 // プラスボタンを表示するため空のノードを追加しておく                 TreeNode node=newTreeNode(drive,iconIndex,iconIndex);                 node.Nodes.Add(newTreeNode());                 treeView1.Nodes.Add(node);             }             // 初期選択ドライブの内容を表示             setListItem(Environment.GetLogicalDrives().First());             // リストビューのヘッダーを設定             listViewTo.View=View.Details;             listViewTo.Clear();             listViewTo.Columns.Add("名前");             listViewTo.Columns.Add("種類");             listViewTo.Columns.Add("更新日時");             listViewTo.Columns.Add("サイズ");         } | 
また、追加する項目が既に別のListViewに存在するかどうかチェックするため
ファイル・フォルダのフルパスをListViewItemに持たせるように修正します。
(リストビューの項目設定処理)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |             /// <summary>             /// リストビューの項目を設定します.             /// </summary>             privatevoidsetListItem(StringfilePath)             {                 // リストビューのヘッダーを設定                 listView1.View=View.Details;                 listView1.Clear();                 listView1.Columns.Add("名前");                 listView1.Columns.Add("種類");                 listView1.Columns.Add("更新日時");                 listView1.Columns.Add("サイズ");                 try                 {                     // フォルダ一覧                     DirectoryInfo dirList=newDirectoryInfo(filePath);                     foreach(DirectoryInfo di indirList.GetDirectories())                     {                         ListViewItem item=newListViewItem(di.Name);                         // フォルダ種類、アイコンの取得                         Stringtype="";                         inticonIndex=0;                         SHFILEINFO shFileInfo=newSHFILEINFO();                         IntPtr hSuccess=SHGetFileInfo(di.FullName,0,outshFileInfo,(uint)Marshal.SizeOf(shFileInfo),SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_TYPENAME);                         if(hSuccess!=IntPtr.Zero)                         {                             type=shFileInfo.szTypeName;                             iconIndex=shFileInfo.iIcon;                         }                         // 各列の内容を設定                         item.Name=di.FullName;                         item.ImageIndex=iconIndex;                         item.SubItems.Add(type);                         item.SubItems.Add(String.Format("{0:yyyy/MM/dd HH:mm:ss}",di.LastAccessTime));                         item.SubItems.Add("");                         // リストに追加                         listView1.Items.Add(item);                     }                     // ファイル一覧                     List<String>files=Directory.GetFiles(filePath).ToList<String>();                     foreach(Stringfile infiles)                     {                         FileInfo info=newFileInfo(file);                         ListViewItem item=newListViewItem(info.Name);                         // ファイル種類、アイコンの取得                         Stringtype="";                         inticonIndex=0;                         SHFILEINFO shinfo=newSHFILEINFO();                         IntPtr hSuccess=SHGetFileInfo(info.FullName,0,outshinfo,(uint)Marshal.SizeOf(shinfo),SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_TYPENAME);                         if(hSuccess!=IntPtr.Zero)                         {                             type=shinfo.szTypeName;                             iconIndex=shinfo.iIcon;                         }                         // 各列の内容を設定                         item.Name=info.FullName;                         item.ImageIndex=iconIndex;                         item.SubItems.Add(type);                         item.SubItems.Add(String.Format("{0:yyyy/MM/dd HH:mm:ss}",info.LastAccessTime));                         item.SubItems.Add(getFileSize(info.Length));                         listView1.Items.Add(item);                     }                 }                 catch(IOException ie)                 {                     MessageBox.Show(ie.Message,"選択エラー");                 }                 // 列幅を自動調整                 listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);             } | 
イベント処理の追加
各ボタンのクリックイベントを追加
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |             /// <summary>             /// 追加ボタンクリックイベント.             /// </summary>             /// <param name="sender"></param>             /// <param name="e"></param>             privatevoidbtn_add_Click(objectsender,EventArgse)             {                 varselectedItems=listView1.SelectedItems;                 foreach(ListViewItem item inselectedItems)                 {                     // 項目をコピーして名前を再設定                     ListViewItem copy=(ListViewItem)item.Clone();                     copy.Name=item.Name;                     // 既にリストに含まれていないパスであれば追加                     if(listViewTo.Items.Find(copy.Name,false).Length==0)                     {                         listViewTo.Items.Add(copy);                     }                 }                 // 列幅を自動調整                 listViewTo.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);             }             /// <summary>             /// 削除ボタンクリックイベント.             /// </summary>             /// <param name="sender"></param>             /// <param name="e"></param>             privatevoidbtn_del_Click(objectsender,EventArgse)             {                 varselectedItems=listViewTo.SelectedItems;                 foreach(ListViewItem item inselectedItems)                 {                     listViewTo.Items.Remove(item);                 }                 // 列幅を自動調整                 listViewTo.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);             }             /// <summary>             /// 追加項目をクリアボタンクリックイベント             /// </summary>             /// <param name="sender"></param>             /// <param name="e"></param>             privatevoidbtnClear_Click(objectsender,EventArgse)             {                 listViewTo.Items.Clear();             } | 
起動してみる


選択した項目を別の ListView に追加することができました。
まとめ
複数のフォルダやファイルに対して何か処理をする際に、ユーザに選ばせるようなイメージですね。
まあよくある感じですか。
次回は選択されたフォルダ・ファイルに対して何かしらの処理をする、などをやってみようかと思います。
ではでは。


 https://www.doraxdora.com/blog/2018/01/31/post-3807/
 https://www.doraxdora.com/blog/2018/01/31/post-3807/








ディスカッション
コメント一覧
まだ、コメントがありません