さて、今回はLoadイベントについて詳しく解説します。
Load イベントとは、プログラムを実行した時、最初に実行されるイベントです。
パスワード管理ツールで扱うイベントの中で、この Load イベントが一番ソースコード行数が多く、一覧表示では欠かせないDataGridViewコントロールとDataTableクラスが登場するので、ガッツリ説明したいと思います。
ちなみに、Loadイベントは、画面(Form)表示に関するイベントなので、フォームロードイベントという呼び方をすることもあります。
ソースコード
それでは、Load イベントハンドラ全体のソースコードを掲載しておきます。
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 |
/// <summary> /// 画面表示時の初期化処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainForm_Load(object sender, EventArgs e) { //ウィンドウのサイズを固定にする this.FormBorderStyle = FormBorderStyle.FixedSingle; //IDパスワード一覧に表示するデータの作成 DataTable dt = new DataTable(); dt.Columns.Add("カテゴリ"); dt.Columns.Add("アプリ/サイト名"); dt.Columns.Add("ID"); dt.Columns.Add("パスワード"); //テーブル名を設定 dt.TableName = "IdPass"; //既に保存済みの/IDパスワードファイルがあれば、読み込む if (File.Exists(_idPassFile)) { dt.ReadXml(_idPassFile); } ///IDパスワード一覧に表示 uxIdPasswordGrid.DataSource = dt; //IDパスワード一覧の初期設定 uxIdPasswordGrid.SelectionMode = DataGridViewSelectionMode.CellSelect; //行選択モードの設定 uxIdPasswordGrid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; //列を左右一杯に広げる uxIdPasswordGrid.AlternatingRowsDefaultCellStyle.BackColor = Color.Linen; //1行置きの背景色を設定 uxIdPasswordGrid.ReadOnly = true; // 書き込み近禁止の設定 uxIdPasswordGrid.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText; //コピーした値にヘッダを含まない uxIdPasswordGrid.AllowUserToAddRows = false; //ユーザーの行追加を禁止にする } |
コンストラクタとLoadイベントの違い
コンストラクタはクラスからインスタンスが作られる際、最初に呼ばれるメソッドです。
クラスやインスタンスについての意味が分からない方は、こちら で解説していますので、ご参照ください。
画面も1つのクラスなので、画面(From)にも当然コンストラクタが存在します。
画面のコンストラクタは、レイアウトエディタで配置された各種コントロールの初期設定や描画処理のソースコードが、Visual Studioによって自動生成されています。
そして、Loadイベントは コンストラクタの実行後に呼び出されるイベントハンドラです。
コンストラクタとLoad イベントは、「画面起動時に実行したい処理を書く場所」という点では同じですが、実行される役割とタイミングにより、使い分ける必要があります。
画面描画の際に行わせる処理はコンストラクタに記述
コンストラクタは画面を描画するための処理であり、 InitializeComponent() がそれを行っています。
コンストラクタの次にLoadイベントが発行されますが、その時には既に画面描画(表示)は終わっています。
つまり、画面表示する前に処理しなければならないものを、Loadイベントに書いても遅いのです。
下記の図では、パスワード管理ツールを画面の真ん中に表示させるため、
this.StartPosition = FormStartPosition.CenterScreen
という命令をLoadイベント内に記述していますが、これだとタイミングが遅すぎます。
なので、今回はこの処理をコンストラクタに書いているのです。

MainForm_Loadの解説
それでは、Loadイベントについて解説していきましょう。
ここでやっていることは、
- MainFormのリサイズ(マウスによるサイズ変更)を禁止
- 一覧に表示するために必要なDataTableクラスの作成
- 前回保存したID,パスワード等の情報をDataTableに保存
- DataTableの内容を画面に表示
という4点です。
MainFormのリサイズを禁止
Loadイベントに書かれた最初の命令は
1 |
this.FormBorderStyle = FormBorderStyle.FixedSingle; |
です。
これは、MainFormの縁の挙動を設定するプロパティですが、ここにFormBorderStyle.FixedSingle という値を指定することで、マウスによる画面サイズの変更が出来ないようにしています。
次に、DataTableというクラスのインスタンスを作成しています。
DataTableの作成
DataTableについての詳細は、こちら に解説しています。
まず、DataTableを new して、インスタンスを作成した後で、カテゴリ、 アプリ/サイト名、ID、パスワードという4項目の列を追加していま す。
1 2 3 4 5 6 7 8 9 |
//IDパスワード一覧に表示するデータの作成 DataTable dt = new DataTable(); dt.Columns.Add("カテゴリ"); dt.Columns.Add("アプリ/サイト名"); dt.Columns.Add("ID"); dt.Columns.Add("パスワード"); //テーブル名を設定 dt.TableName = "IdPass"; |
列の追加が終わったら、DataTableに “IdPass”という名前を付与しています。
単にDataTableにデータを保持するだけなら、あえて名前を付ける必要はありませんが、DataTableのメソッドでファイルに読み書きする場合は、名前を付けないとエラーになってしまいます。
次は、保存したXMLファイルの読み込みです。
ID、パスワード等の情報をファイルから読み込み
DataTableのWriteXmlメソッドを使って保存したファイルは、ReadXmlメソッドで読み込むことが出来ます。
ただ、初めてプログラムを起動する際は、読み込むべきファイルがありません。
ReadXmlメソッドでファイルを読み込む際、ファイルが見つからないとエラーになるため、ファイルの存在チェックを行い、存在する場合のみファイルを読み込むようにしています。
File.Exists() というメソッドを使う事で、ファイルの存在チェックが出来ます。
1 2 3 4 5 |
//既に保存済みの/IDパスワードファイルがあれば、読み込む if (File.Exists(_idPassFile)) { dt.ReadXml(_idPassFile); } |
読み込んだ内容を画面(DataGridView)に表示
ファイルをDataTableに読み込むだけだと画面には何も表示されませんので、DataGridViewのDataSouceプロパティにDataTableを代入します。
1 2 |
///IDパスワード一覧に表示 uxIdPasswordGrid.DataSource = dt; |
この1行を実行することで、DataGridVIew(uxIdPasswrodGrid)とDataTableの関連付け(バインド)が行われ、以降は画面からデータを編集すると、自動的にdataTableに反映されるようになります。
DataGridViewの体裁を整える
最後に、DataGridViewの表示上の体裁を整えます。
ここでは、6個のプロパティに値を設定しています。
それぞれの意味については、ソースコードのコメントをご参照下さい。
1 2 3 4 5 6 7 8 |
//IDパスワード一覧の初期設定 uxIdPasswordGrid.SelectionMode = DataGridViewSelectionMode.CellSelect; //行選択モードの設定 uxIdPasswordGrid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; //列を左右一杯に広げる uxIdPasswordGrid.AlternatingRowsDefaultCellStyle.BackColor = Color.Linen; //1行置きの背景色を設定 uxIdPasswordGrid.ReadOnly = true; // 書き込み近禁止の設定 uxIdPasswordGrid.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText; //コピーした値にヘッダを含まない uxIdPasswordGrid.AllowUserToAddRows = false; //ユーザーの行追加を禁止にする } |
DataGridViewの初期状態は、ユーザーが変更できる状態になっています。
また、列幅が狭く右側に無駄なスペースが出来ていたり、背景色が一律で白だったりと殺風景なデザインになっています。

今回は編集モードを作る予定なので、編集ボタンが押されるまでは編集禁止にしておきたいので、書き込み禁止とユーザーによる行追加の禁止を設定しました。
また、右側の無駄なスペースを減らして情報はめいっぱい表示させると共に、2行ごとに背景色の色を変えて見やすくするなど、少し見栄えを良くしてみました。
その他
セルの中身をコピー&ペーストしたいため、行選択モードを「セル」に設定すると共に、ヘッダ(列名)も含ませないようにもしています。
コントロールの設定はVisual Studioのプロパティウィンドウでも可能
DataGridViewの体裁を整えるために6行のコードを書いていますが、実はVisual Studioでプロパティを設定することが出来ます。
設定したいプロパティをマウスでクリックし、値を選択するだけです。

この方法で設定した内容は、Visual Studioが InitializeComponent() の中にコードを追加してくれます。
今回はコンストラクタに this.StartPosition = FormStartPosition.CenterScreen を1行追加していますが、Visual Studioのプロパティで CenterScreen を選択すると、コンストラクタにこの1行を追加する必要は無くなります。
1 2 3 4 5 6 7 8 9 10 11 |
/// <summary> /// 画面に配置するコントロールの登録と初期化 /// </summary> public MainForm() { InitializeComponent(); //プログラムを画面の真ん中に表示 this.StartPosition = FormStartPosition.CenterScreen; } |
MainFormの縁をクリックしてプロパティを表示し、プロパティを表示したら、StartPosition をクリックし、CenterScreenを選択します。

まとめ
今回はLoadイベントの内容について解説しました。
Loadイベントは、コンストラクタで画面の描画が終わってから呼び出されるイベントで、
- MainFormのリサイズ(マウスによるサイズ変更)を禁止
- 一覧に表示するために必要なDataTableクラスの作成
- 前回保存したID,パスワード等の情報をDataTableに保存
- DataTableの内容を画面に表示
という内容を記述しています。
DataTableについてはよく使うので、是非これを機会に押さえておいていただければと思います。
次回は、他のイベントハンドラについて解説していきたいと思います。