パスワード管理ツールを自作しよう!(第5回・Loadイベント編)

プログラミング入門
この記事は約7分で読めます。

さて、今回はLoadイベントについて詳しく解説します。

Load イベントとは、プログラムを実行した時、最初に実行されるイベントです。

パスワード管理ツールで扱うイベントの中で、この Load イベントが一番ソースコード行数が多く、一覧表示では欠かせないDataGridViewコントロールとDataTableクラスが登場するので、ガッツリ説明したいと思います。

ちなみに、Loadイベントは、画面(Form)表示に関するイベントなので、フォームロードイベントという呼び方をすることもあります。

ソースコード

それでは、Load イベントハンドラ全体のソースコードを掲載しておきます。

コンストラクタと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イベントに書かれた最初の命令は

です。

これは、MainFormの縁の挙動を設定するプロパティですが、ここにFormBorderStyle.FixedSingle という値を指定することで、マウスによる画面サイズの変更が出来ないようにしています。

次に、DataTableというクラスのインスタンスを作成しています。

DataTableの作成

DataTableについての詳細は、こちら に解説しています。

まず、DataTableを new して、インスタンスを作成した後で、カテゴリ、 アプリ/サイト名、ID、パスワードという4項目の列を追加していま す。

列の追加が終わったら、DataTableに “IdPass”という名前を付与しています。

単にDataTableにデータを保持するだけなら、あえて名前を付ける必要はありませんが、DataTableのメソッドでファイルに読み書きする場合は、名前を付けないとエラーになってしまいます。

次は、保存したXMLファイルの読み込みです。

ID、パスワード等の情報をファイルから読み込み

DataTableのWriteXmlメソッドを使って保存したファイルは、ReadXmlメソッドで読み込むことが出来ます。

ただ、初めてプログラムを起動する際は、読み込むべきファイルがありません。

ReadXmlメソッドでファイルを読み込む際、ファイルが見つからないとエラーになるため、ファイルの存在チェックを行い、存在する場合のみファイルを読み込むようにしています。

File.Exists() というメソッドを使う事で、ファイルの存在チェックが出来ます。

読み込んだ内容を画面(DataGridView)に表示

ファイルをDataTableに読み込むだけだと画面には何も表示されませんので、DataGridViewのDataSouceプロパティにDataTableを代入します。

この1行を実行することで、DataGridVIew(uxIdPasswrodGrid)とDataTableの関連付け(バインド)が行われ、以降は画面からデータを編集すると、自動的にdataTableに反映されるようになります。

DataGridViewの体裁を整える

最後に、DataGridViewの表示上の体裁を整えます。

ここでは、6個のプロパティに値を設定しています。

それぞれの意味については、ソースコードのコメントをご参照下さい。

DataGridViewの初期状態は、ユーザーが変更できる状態になっています。

また、列幅が狭く右側に無駄なスペースが出来ていたり、背景色が一律で白だったりと殺風景なデザインになっています。

今回は編集モードを作る予定なので、編集ボタンが押されるまでは編集禁止にしておきたいので、書き込み禁止とユーザーによる行追加の禁止を設定しました。

また、右側の無駄なスペースを減らして情報はめいっぱい表示させると共に、2行ごとに背景色の色を変えて見やすくするなど、少し見栄えを良くしてみました。

その他

セルの中身をコピー&ペーストしたいため、行選択モードを「セル」に設定すると共に、ヘッダ(列名)も含ませないようにもしています。

コントロールの設定はVisual Studioのプロパティウィンドウでも可能

DataGridViewの体裁を整えるために6行のコードを書いていますが、実はVisual Studioでプロパティを設定することが出来ます。

設定したいプロパティをマウスでクリックし、値を選択するだけです。

この方法で設定した内容は、Visual Studioが  InitializeComponent() の中にコードを追加してくれます。

今回はコンストラクタに this.StartPosition = FormStartPosition.CenterScreen を1行追加していますが、Visual Studioのプロパティで CenterScreen を選択すると、コンストラクタにこの1行を追加する必要は無くなります。

MainFormの縁をクリックしてプロパティを表示し、プロパティを表示したら、StartPosition をクリックし、CenterScreenを選択します。

まとめ

今回はLoadイベントの内容について解説しました。

Loadイベントは、コンストラクタで画面の描画が終わってから呼び出されるイベントで、

  • MainFormのリサイズ(マウスによるサイズ変更)を禁止
  • 一覧に表示するために必要なDataTableクラスの作成
  • 前回保存したID,パスワード等の情報をDataTableに保存
  • DataTableの内容を画面に表示

という内容を記述しています。

DataTableについてはよく使うので、是非これを機会に押さえておいていただければと思います。

次回は、他のイベントハンドラについて解説していきたいと思います。

タイトルとURLをコピーしました