動的にDataGridViewを追加
今回の目的1.CSVファイルをDataGridViewに読み込む2.その際DataGridViewを動的に追加する3.その際DataGridViewはタブコントロールの新しいタブに設置する4.そのためにタブコントロールに新しいタブを動的に追加する5.選択中のタブをDataGridViewごと削除する以上です。下のようにタブにDataGridViewコントロールが作られて、CSVファイルが読み込まれます。準備するもの。適当なCSVファイル(今回は1行目にヘッダー、データは2行目以降)フォームにタブコントコールを1個(名前はtabMainとします)そしてボタンを2個(こっちはbutton1とbutton2)ボタン1で読み込み、2で削除します。//--------------ここから-----------------------------------------using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string fileName = ""; //OpenFileDialogクラスのインスタンスを作成 OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "CSVファイル(*.csv)|*.csv"; ofd.Title = "CSVファイルを選択してください"; ofd.RestoreDirectory = true; //ダイアログを表示する if (ofd.ShowDialog() == DialogResult.OK) { fileName = ofd.FileName; } else { Console.WriteLine("キャンセルされた。"); return; } //ページ名に連番をつける設定 string title = "TabPage " + (this.tabMain.TabCount + 1).ToString(); TabPage myTabPage = new TabPage(title);//myTabPageという名前でページを作ります this.tabMain.TabPages.Add(myTabPage);//新しいページをTabMainに追加 //次にデータグリッドをMyDataGridViewという名前で作ります DataGridView myDataGridView = new System.Windows.Forms.DataGridView(); myTabPage.Controls.Add(myDataGridView);//作ったグリッドを新タブページに加えます myDataGridView.Location = new Point(0, 0);//場所と大きさを設定 myDataGridView.Dock = DockStyle.Fill; try { // csvファイルを開く using (var sr = new System.IO.StreamReader(@fileName, Encoding.GetEncoding("Shift_JIS"))) { //ヘッダー部分の処理(一番上の行のデータを分割し、必要な列を追加) var line = sr.ReadLine();// ファイルから一行読み込む string[] values = line.Split(',');//カンマで分割 foreach(var n in values) { myDataGridView.Columns.Add(n,n); } //データ部分の処理 while (!sr.EndOfStream) { line = sr.ReadLine(); values = line.Split(','); myDataGridView.Rows.Add(values); } } } catch (System.Exception m) { // エラー表示 Console.WriteLine(m.Message); } } private void button2_Click(object sender, EventArgs e) { //タブを閉じる (データグリッドのメモリが解放されるのかは不明) if (this.tabMain.SelectedIndex > -1) { //心配だったら、下でタブ内のコントロールを全て削除してみるとか? // foreach (Control item in this.tabMain.SelectedTab.Controls) // { // item.Dispose(); // } this.tabMain.SelectedTab.Controls.Clear(); this.tabMain.SelectedTab.Dispose(); //←追加 } } }}//--------------ここまで-----------------------------------------今回はタブを追加してそこにデータグリッドビューを追加しました。メモリのことがよくわからないので、タブを閉じたときにデータグリッドも一緒に消えてくれるのかはわかりません。大きなデータを扱う場合は注意したいです。独習C# 新版 [ 山田 祥寛 ]価格:3960円(税込、送料無料) (2020/4/2時点)楽天で購入【キャッシュレス5%還元】【35分でお届け】ファーストクイーン I NEXT (Prologue付)【呉ソフトウエア工房】【ダウンロード版】価格:1980円(税込、送料無料) (2020/4/2時点)楽天で購入