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

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

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

コントロールが張り終わったら、今度は各コントロールに名前を付けていきます。
この時、そのコントロールがどういう役割なのかが判断できるような名前を付けます。
Labelは固定の文字列を表示するコントロールなので、特に名前を付ける必要はありません。
また、前回作成したパスワード管理ツールと同様に、MainForm以外は先頭に”ux”という接頭語を付加しています。
コントロールの役割(Labelを除く) | コントロールに付ける名前 |
---|---|
プロジェクトが出来上がった際、最初に自動で作成されるWindow | MainForm |
分割したいファイル名の入力/表示用TextBox | uxCsvFile |
出力先フォルダの入力/表示用TextBox | uxOutputFolder |
ヘッダ行数の入力用TextBox | uxHeaderCount |
分割行数の入力用TextBox | uxDivideCount |
ファイル選択ダイアログ表示Button | uxSelectFile |
フォルダ選択ダイアログ表示Button | uxSelectFolder |
分割実行Button | uxExecDivide |
今回はいくつかのコントロールについて、一部のプロパティに値を設定したいと思います。
コントロール名 | プロパティ名 | 設定する値 |
---|---|---|
MainForm | Font Text | Meiryo UI,9pt CsvDivider |
uxHeaderCount | TextAlign | Right |
uxDivideCount | TextAlign | Right |
uxSelectFile | Text | 選択 |
uxSelectFolder | Text | 選択 |
uxExecDivide | Text | 分割実行 |

ちなみに、TextAlignプロパティは、文字を右寄せにするためのものです。
これらプロパティの設定は、今回 Visual Studioのレイアウトエディタ上から設定しましたが、もちろんプログラムにソースコードから設定することも可能です。
その場合、MainForm() コンストラクタか、Form_Loadイベントハンドラのどちらかに、以下の行を記述します。
1 2 3 4 5 6 |
this.Font = new Font("Meiryo UI", (float)9.0); uxHeaderCount.TextAlign = HorizontalAlignment.Right; uxDivideCount.TextAlign = HorizontalAlignment.Right; uxSelectFile.Text = "選択"; uxSelectFolder.Text = "選択"; uxExecDivide.Text = "分割実行"; |
Visual Studioのレイアウトエディタ上で設定する方法と、ソースコードで設定する方法のどちらを選択すべきかについては、人それぞれ意見があると思います。
私は、プログラムの最初から最後まで変更しないプロパティについては、レイアウトエディタで設定すれば良いと思います。
コードでつらつら設定しても無駄にコード量が増えるだけですからね。
ただ、人に説明する時とか、別のプログラムとして使いまわす場合、いちいちレイアウトエディタで値を設定するより、ソースコードをコピペした方が楽なので、そういう場合はソースコードに記述すれば良いと思います。
ということで、ここまでの作業で画面レイアウトは完了です。
イベントハンドラを作ろう
では、最後にイベントハンドラを作ります。
今回の画面はボタンが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 |
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 CsvDivider { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void UxExecDivide_Click(object sender, EventArgs e) { } private void UxSelectFile_Click(object sender, EventArgs e) { } private void UxSelectFolder_Click(object sender, EventArgs e) { } } } |
動かしてみよう
では、実際に動かしてみましょう。
動かし方は、Visual Studio の上段やや左にある「開始」ボタンをクリックするだけです。

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


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