ListViewの選択範囲をクリップボードへコピー。
そのままエクセルに貼り付けします。
asのキャスティングはnullを返すのってこういうふうに使うものなのか。
C# Tips-キャストすべきかasするべきか-
あと、コラムヘッダーの設定方法を完全に忘れてた。
View=View.Detailsにしとかないとコラムヘッダーが表示されない。
stackoverflowを参考。
How can I Copy to clipboard, a ListView's multiple selected items?
https://stackoverflow.com/questions/30209283/how-can-i-copy-to-clipboard-a-listviews-multiple-selected-items
雑文ですみません。雑記的なブログです。
- public MainForm()
- {
- //
- // The InitializeComponent() call is required for Windows Forms designer support.
- //
- InitializeComponent();
- //コラムヘッダーの設定
- this.lsvTEST.View = View.Details;
- this.lsvTEST.GridLines = true;
- this.lsvTEST.MultiSelect = true;
- this.lsvTEST.FullRowSelect = true;
- int maxCol = 3;
- System.Windows.Forms.ColumnHeader[] colHd = new System.Windows.Forms.ColumnHeader[maxCol];
- for(int i=0;i<maxCol;i++)
- {
- colHd[i] = new System.Windows.Forms.ColumnHeader();
- colHd[i].Text ="item"+i.ToString("00");
- }
- this.lsvTEST.Columns.AddRange(colHd);
- string[] item = new string[3];
- for(int ii = 0;ii<20;ii++)
- {
- item = new string[3]{"AA"+ii,"BB"+ii,"CC"+ii};
- this.lsvTEST.Items.Add( new System.Windows.Forms.ListViewItem(item) );
- }
- }
- //キー動作
- void LsvTESTKeyDown(object sender, KeyEventArgs e)
- {
- if (e.Control && e.KeyCode == Keys.C)
- {
- var builder = new System.Text.StringBuilder();
- foreach(var selectItem in this.lsvTEST.SelectedItems)
- {
- ListViewItem item = selectItem as ListViewItem;
- if( item != null)
- {
- foreach(ListViewItem.ListViewSubItem itemSub in item.SubItems)
- {
- builder.Append(itemSub.Text);
- builder.Append("\t");
- }
- builder.AppendLine();
- }
- }
- Clipboard.SetText(builder.ToString());
- }
- }