連載:VB 6ユーザーのための
これならマスターできるVB 2005超入門

第3回 VB 2005の“My”の便利さに脱帽!

羽山 博
2006/10/25
Page1 Page2 Page3

■プロパティ以外の値を保存するには

 プロパティについては、設定項目を作ってそれと対応付けるだけで、アプリケーションの終了時に値が保存された。次に、プロパティ以外の任意の値を保存する方法を見てみよう。

 このプログラムでは、[更新]ボタンをクリックすると、その時点での日時も保存する。フォームには「日時」というプロパティはないので、当然のことながらプロパティとの対応付けはできない。だが、設定項目は自由に作成できる。

 右上に表示されているソリューション・エクスプローラから、プロジェクト名(この例では「ShowLastAccess」)をクリックし、メニューから[表示]-[プロパティページ]を選んでプロジェクトのプロパティを表示する。

 左側にタブがいくつかあるが、その中の[設定]をクリックしよう。すると、設定項目の一覧が表示されるので、そこに好きな項目を追加すればよい(図10)。


図10 プロジェクトのプロパティで設定項目を作成する
すでに設定した「Pos」が一覧の中にある( )。その次の行をクリックすると「Settings」という新しい名前が表示されるが、それを「LastAccess」に書き換える( )。アクセス日時を保存するための項目なので、型は「Date」を選択する。スコープはユーザーまたはアプリケーションが選べる(本稿のサンプル・プログラムでは「ユーザー」を選択した)。初期値は設定していない。なお、メニューから[プロジェクト]−[ShowLastAccessのプロパティ]を選んでもこの画面が表示できる。

 このようにして設定項目を作成しておけば、

My.Settings.LastAccess

で、その設定項目を参照することができる。もちろん、この項目に値を設定しておけば、プログラムの終了時にその値が保存され、起動時に読み込まれる。

■任意のタイミングで設定を保存したり読み込んだりするには

 そろそろ終わりに近づいてきた。フォームがロードされたときに前回の日時を読み込むコードと、[更新]ボタンをクリックしたときに日時を保存するコードを書けばおしまい。

 前回の日時は自動的に読み込まれているので、フォームのLoadイベント・ハンドラでは、

My.Settings.LastAccess

をラベルに表示するだけでよい。ただし、この値はDate型なので、ラベルのTextプロパティに代入するには、ToStringメソッドを使って文字列に変換しておく必要がある。Loadイベントのイベント・ハンドラの名前をshowAccessTimeとすると、次のようなコードになる。

Private Sub showAccessTime(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  lblLastAccess.Text = My.Settings.LastAccess.ToString

End Sub
読み込まれた日時をラベルに表示するLoadイベント・ハンドラ

 設定はアプリケーションの終了時に自動的に保存されるが、好きなときに保存したい場合はSaveメソッドを使う。このプログラムであれば、[更新]ボタンのClickイベント・ハンドラに書けばよい。このイベント・ハンドラの名前をupdateAccessTimeとすると、次のようなコードになる。

Private Sub updateAccessTime(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click

  My.Settings.LastAccess = Now
  My.Settings.Save()

End Sub
現在の日時を設定に保存するClickイベント・ハンドラ

 My.Settings.LastAccessにNow関数の戻り値を代入し、My.SettingsのSaveメソッドを使って設定を保存しているというわけだ。なお、設定を任意のタイミングで読み込むにはReloadメソッドを使って、

My.Settings.Reload()

と記述する。

 コードが書けたら、実行してみよう。図11のようになるだろう。


図11 保存されている日時が表示された
最初に実行するときには、まだ保存されている日時がないので正しく日時が表示されないが、[更新]ボタンをクリックすると、その時点での日時が保存される。次にこのアプリケーションを実行すると、保存されていた日時が読み込まれ、ラベルに表示される。

■設定はどこに保存されているか?

 今回のサンプル・プログラムは以上でおしまいだが、最後に少し補足しておこう。My.Settingsでは、これまでと違ってレジストリに設定を保存しない。では、一体どこに設定が保存されているのだろうか?

 アプリケーションの設定は、app.configというファイルに保存されている(なおapp.configはビルド後に「<アプリケーション名>.exe.config」という名前のファイルとして実行ファイルと同じ場所にコピーされる)。これはプロジェクトのフォルダの下を探せば簡単に見つかる。

 一方、ユーザーごとの設定はuser.configというファイルに保存されている。こちらはユーザーごとなので、「\Documents and Settings\ユーザー名」フォルダの下のかなり深い階層に保存されている。隠しフォルダになっているので、エクスプローラで検索して見つけるといいだろう。

 最初に少し触れたように設定内容は以下のようなXMLファイルとして保存されている。これは、今回のプログラムのuser.configの内容である。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <userSettings>
    <ShowLastAccess.My.MySettings>
      <setting name="Pos" serializeAs="String">
        <value>285, 248</value>
      </setting>
      <setting name="LastAccess" serializeAs="String">
        <value>10/15/2006 13:46:02</value>
       </setting>
    </ShowLastAccess.My.MySettings>
  </userSettings>
</configuration>
My.Settingsの項目が保存されているuser.configファイルの内容

 これを見れば分かるように、設定内容は単なるテキストなので、パスワードなどを保存しておくのは絶対に避けるべきである。

結び − Myのオブジェクトと.NET Frameworkクラス・ライブラリのお話を少しだけ

 今回は、Myの機能の一部を取り上げるということで、My.Settingsを使ってアプリケーションの設定を保存したり、読み出したりする方法を見た。しかし、設定を保存することがMyの機能であると誤解されては困る(そんなふうに誤解する人はいないか)。

 VB 6では、ちょっと気の利いたWindowsの機能を利用しようとすると、Windows APIを呼び出す必要があった。関数の宣言は長ったらしくて面倒、エラーが起こったときにはVisual Studioごとクラッシュすることもまれではなかった。エラーの原因を突き止めるのも一苦労。

 VB 2005では、.NET Frameworkのクラス・ライブラリがすべて利用できる。……というと、また難しそうに聞こえるが、クラス・ライブラリはWindows APIを使いやすくした機能の集まりのようなものだと思えばよい。「クラス」と名前が付いていることからも、ただの関数ではなく、まさにクラスであってメソッドやプロパティが利用できるのだけれど、いまのところは気軽に考えておけばいい。要するに、煩わしい宣言を書かなくても、Windowsのさまざまな機能が安全に使えるということだ。

 .NET Frameworkのクラス・ライブラリは極めて多岐にわたっていて、数も膨大。種類ごとに分類・整理されてはいるのだけれど、すべてを把握するのはなかなか難しい。例えば、カレント・ディレクトリの名前であれば、

System.Environment.CurrentDirectory

で取得できる。しかし、私自身、膨大なクラス・ライブラリの中からこれを見つけるのに、最初は10分以上かかった。

 慣れればさほど苦痛でもないのだが、敷居が高いことも事実。「何とかならないか」ということで登場したのが今回取り上げたMy機能。VB 2005のMyは膨大なクラス・ライブラリのうち、よく使うものを集め、さらに使いやすくしたものと考えればよい。

 Myを使った場合はカレント・ディレクトリの名前は、

My.Computer.FileSystem.CurrentDirectory

で表される。これに限っていえば、Myを使った方が記述は長くなるが、もともとの数が限定されているので、目的のメソッドやプロパティは素早く見つけられる。とにかくMyと書けばIntelliSenceのガイドもあるので、何とか目的の機能にたどり着けるだろうというわけだ。

 Myの主な機能は表2のように分類されている。

オブジェクト 取り扱える情報
My.Computer コンピュータに関する情報
My.Application アプリケーションに関する情報
My.Forms フォームに関する情報
My.WebServices XML Webサービスに関する情報
My.Settings 設定に関する情報
My.User ユーザーに関する情報
表2 Myのオブジェクトと機能の一覧(主要なもの)

 今回取り扱った設定の保存や読み出しはクラス・ライブラリを使ってやろうとするとかなりコードが煩雑になる。きびすを返してVB 6に逆戻りしたくなる人もいるだろう……というのもあながち誇張ではない。それに比べるとMy.Settingsを利用するとあっけないほどに簡単。開発効率もグンとアップする。

 しかしながら、いいことばかりでもない。Myだけでできないこともたくさんある。そうなると、当然.NET Frameworkのクラス・ライブラリを使う必要がある。Windows APIを直接使うよりははるかに便利で安全なので、それほど恐れることもないのだが、大きな変化に面食らっているVB 6の経験者にとっては、Myは.NET Frameworkに慣れるための橋渡しとしての効用もある。

 そういう意味では、自転車でいえば補助輪、水泳でいえば浮き輪のような……いや、もっと便利でパワフルなので、海外旅行でいうパッケージ・ツアーといったところか、Myはそういった存在に例えることができるかもしれない。End of Article


 INDEX
  連載:VB 6ユーザーのためのこれならマスターできるVB 2005超入門
  第3回 VB 2005の“My”の便利さに脱帽!
    1.サンプル・プログラム3 − 設定の保存と読み出し
    2.フォームのプロパティを保存するには/設定項目の値を利用するには
  3.プロパティ以外の値の保存/任意のタイミングで保存・読み込み/結び
 
インデックス・ページヘ  「これならマスターできるVB 2005超入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH