今回からVisual Studio2019 を使って、CSV結合ツールの画面レイアウトを作成していきます。
この記事を読む前に、Visual Studio2019をまだインストールされていない方は、こちら の記事を参考にインストールをお願いします。
また、インストール後のVisual Studio2019の起動方法は こちら の記事を、画面レイアウトの作成方法は こちら の記事をご覧ください。
プロジェクトを作ろう
プロジェクトを作るには、プロジェクト名を決めなければなりません。
今回はCSVファイルを結合するものになるので、CsvJoiner と言うプロジェクト名にしましょう。
プロジェクト名の変更は結構面倒なので、打ち間違い等に気を付けて慎重に入力してください。

詳しい手順については、こちら の記事をご参照ください。
プロジェクトが出来上がったら、いよいよレイアウトの作成に移ります。
Form.csの名前を変更しよう
プロジェクトが出来上がった状態では、Formクラスのファイル名が Form1.cs になっているので、適切な名前に変更したいと思います。
複数のフォームを使うプログラムの場合、それぞれのフォームに適切な名前を付けることで、ソリューションエクスプローラー上での識別がしやすくなります。
ただ、今回は画面が1個なので、あまり意味は無いかもしれません。
この作業は必須ではないので、このままForm1.csでも構いません。
新しく付ける名前はフォームの役割が分かるような、それっぽいものを付ければOKです。
ただ、フォームクラスだと判断できるように名前の一部に Formを付けた方が、よりベターです。
例えば、 CsvJoinerForm とかですかね。
プログラム毎に名前を考えるのが面倒という方は、一律にMainFormという名前を使ってもいいと思います。
名前の変更方法は、Visual Studio の右側にあるソリューションエクスプローラーから「Form1.cs」を右クリックし、表示されるメニューから「名前の変更」を選び、MainForm 又は 好きな名前に変更して下さい。

画面レイアウトを作ろう
Visual Studioのレイアウトエディターが起動したら、下記の通り Label、Button、ComboBox のコントロールを張り付けて下さい。

コントロールが張り終わったら、今度は各コントロールに名前を付けていきます。
ポイントとして、そのコントロールがどういう役割なのかが判断できるような名前を付けます。
但し、Labelは固定の文字列を表示するコントロールなので、特に名前を付ける必要はありません。
また、前回作成したCSV分割ツールと同様に、MainForm以外は先頭に”ux”という接頭語を付加しています。
コントロールの役割(Labelを除く) | コントロールに付ける名前 |
---|---|
プロジェクトが出来上がった際、最初に自動で作成されるWindow | MainForm |
結合対象フォルダの入力/表示用TextBox | uxTargetFolder |
出力先ファイル名入力/表示用TextBox | uxOutputFile |
ヘッダ行数の入力用TextBox | uxHeaderCount |
結合対象フォルダの選択ダイアログ表示Button | uxSelectTargetFolder |
出力ファイル名の選択ダイアログ表示Button | uxSelectOutputFile |
結合実行Button | uxExecJoin |
前回と同様、今回もいくつかのコントロールについて、一部のプロパティに値を設定したいと思います。
下記は一例ですので、自分の好みに合わせて設定してみて下さい。
コントロール名 | プロパティ名 | 設定する値 |
---|---|---|
MainForm | Font Text | Meiryo UI,9pt CSV結合ツール |
uxHeaderCount | TextAlign | Right |
uxSelectTargetFolder | Text | 選択 |
uxSelectOutputFile | Text | 選択 |
uxExecJoin | Text | 結合実行 |
ちなみに、TextAlignプロパティは、文字を右寄せにするためのものです。
これらプロパティの設定は、今回 Visual Studioのレイアウトエディタ上から設定しましたが、もちろんプログラムにソースコードから設定することも可能です。

その場合、MainForm() コンストラクタか、Form_Loadイベントハンドラのどちらかに、以下の行を記述します。
1 2 3 4 5 |
this.Font = new Font("Meiryo UI", (float)9.0); uxHeaderCount.TextAlign = HorizontalAlignment.Right; uxSelectTargetFolder.Text = "選択"; uxSelectOutputFile.Text = "選択"; uxExecJoin.Text = "分割実行"; |
Visual Studioのレイアウトエディタ上で設定する方法と、ソースコードで設定する方法のどちらを選択すべきかについては、お好きな方をどうぞ。
1つの考え方として、プログラムの最初から最後まで変更しないプロパティについては、レイアウトエディタで設定すれば良いと思っています。
但し、人に説明する際や、別のプログラムとして使いまわす場合、レイアウトエディタよりソースコードの方がコピペが方が楽な時があるので、その時はソースコードへの記述が良いように思います。
以上で画面レイアウトの作業は完了です。
イベントハンドラを作ろう
では、最後にイベントハンドラを作りましょう。
今回の画面はボタンが3つだけなので、3つのbuttonコントロールを順次ダブルクリックして、イベントハンドラを作成しておいてください。
ここまでの操作で、下記のプログラムコードが自動的に作られたと思います。
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 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CsvJoiner { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void UxSelectTargetFolder_Click(object sender, EventArgs e) { } private void UxSelectOutputFile_Click(object sender, EventArgs e) { } private void UxExecJoin_Click(object sender, EventArgs e) { } } } |
動かしてみよう
では、実際に動かしてみましょう。
Visual Studio の上段やや左にある「開始」ボタンをクリックすれば、プログラムが動きます。

ここでもしエラーが出た場合、Visual Stuido上でソースコードの不整合が発生している可能性があるので、こちらの記事の目次から「動かしてみよう」にジャンプして、書かれている内容を実行してみて下さい。
64bitで動かしてみよう
1ファイルあたり1~2GB程度のCSVファイルを結合するのであれば、このままでも問題無く分割出来ます。
しかし、より大きなCSVファイルを結合する場合は、64bit で動かさなければなりません。
32bit とは、CPUが処理するアドレス空間(メモリを指定できる範囲)のサイズのことで、4GBを超えることが出来ません。
Visual Studio は、OS(Windows10)のビット数(32Bit 又は 64Bit)
を自動で判断する「Any CPU」という設定がされています。
しかし、残念なことに32bit が優先になっているため、64bitのWindows10であっても32bit で動いてしまいます。
Visual Studioのプロジェクトの設定を変更し、32bit優先をやめるか、64Bitとして強制的に動作させるかを選択すれば、この問題は解決します。
方法は簡単で、次の設定で64bitで動作させることができます。


以上の操作を行った後、「開始」ボタンをクリックすると、4GB 以上のメモリを扱えるようになります。
まとめ
如何でしたでしょうか。
今回はレイアウトエディタを使って
- 必要なコントロールを画面(Window)に配置
- コントロールに名前を付ける
- コントロール(Button)をダブルクリックし、イベントハンドラを自動作成する
というところまで行いました。
次回は全ソースの掲載と説明に入りますが、もしコピー&ペーストしながら動作を確かめたいのであれば、コントロールの名前は大文字小文字含め、一字一句間違わないようご注意ください。
逆に、掲載したソースを理解しながら作っていくのであれば、コントロールの名前は好きなものを付けて頂ければと思います。