none
アプリケーション全体のプロパティの保存場所 RRS feed

  • 質問

  •  VB.NET で、Windows Form のアプリケーションを開発しています。
     各フォーム固有の変数は、フォームにプロパティを追加して読み書きすれば良いと思うのですが、アプリケーション全体で使用する変数は、どこに追加すれば良いのでしょうか?

     イメージとしては、アプリケーション全体を表すクラスにプロパティを追加し、そこに読み書きするような形だと思うのですが、それを追加する場所がよくわかりません。

    たとえば、アプリケーション全体で使用したい、Client オブジェクトというオブジェクトがあったとして、

    Dim _c As Client
    _c = Application.Client

    で、Client オブジェクトが取得できるような形です。
    みなさん、どのようにされているのでしょうか?

    2009年9月28日 1:08

回答

  • >1人のユーザーが、アプリケーションを起動してから終了するまでの間、保持しているデータ、というイメージでした。

    起動中だけでよかったんですか。

    だと、いわゆるグローバル変数的なもので十分ですね。

    であれば、静的クラスを作って、そこに静的プロパティを配置すればよろしいんじゃないでしょうか。

    VB 書けないので、C# で書くと

    public static VlatileSettings
    {
      public static HogeValue { get; set; }
    }

    みたいな感じです。

    • 回答としてマーク tohosaku 2009年9月28日 23:55
    2009年9月28日 7:42
  • 通常のクラスですとインスタンスを作成しなければいけません。Sharedを付けたプロパティはアプリケーション全体からインスタンスを作成することなく共通でアクセスできます。アプリケーション全体で使用できるということは逆に言えば見通しが悪くなるということですので、使用には気を付ける必要があります。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク tohosaku 2009年9月28日 23:55
    2009年9月28日 8:02
    モデレータ

すべての返信

  • そのプロパティはアプリケーション終了時にも保持する必要があるのでしょうか? とりあえず以下をご紹介しておきます。

    VB.NETのモジュールの正体は?
    http://www.atmarkit.co.jp/fdotnet/dotnettips/248module/module.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年9月28日 2:06
    モデレータ
  • Visual Studio 2005 以降だと My.Settings がありますね。

    Visual Studioでアプリケーションの設定を保存する
    http://dobon.net/vb/dotnet/programing/mysettings.html
    DOBON.NET トップページ → http://dobon.net/

    Visual Basic 2005 での My.Settings の使用
    http://msdn.microsoft.com/ja-jp/library/ms379611(VS.80).aspx

    2009年9月28日 5:40
  • 「アプリケーション全体」という語の指す範囲が曖昧なので、明確にしてほしいです。

    • そのアプリケーションを使う人すべてで共有する設定
    • そのアプリケーションを使う人それぞれ個別の設定
    • それ以外

    のどれでしょう?

    2009年9月28日 6:30
  •  trapemiyaさん、あんにんごさん、渋木宏明さん、ご回答ありがとうございます。

     言葉が足りず、申し訳ありませんでした。1人のユーザーが、アプリケーションを起動してから終了するまでの間、保持しているデータ、というイメージでした。
     ユーザーがフォーム間を遷移している間も、各フォームからアクセスできるようなデータという意味で書きました。いったん、アプリケーションを終了した場合は、リセットされることが望ましいため、設定ファイルへの書き出しなどは考えていません。

    Namespace My
        Partial Friend Class MyApplication
            Public Property Consigner() As Consigner
                Get
    
                End Get
                Set(ByVal value As Consigner)
    
                End Set
            End Property
        End Class
    End Namespace

    こんな感じで設定してしまえば良いのでしょうか?
    それなりに需要がありそうな(と私が思うだけ?)割に、設定ファイルへの書き出し等の情報にくらべて、使用例等が見つからない気がしたので質問してみました。

    2009年9月28日 7:01
  • >1人のユーザーが、アプリケーションを起動してから終了するまでの間、保持しているデータ、というイメージでした。

    起動中だけでよかったんですか。

    だと、いわゆるグローバル変数的なもので十分ですね。

    であれば、静的クラスを作って、そこに静的プロパティを配置すればよろしいんじゃないでしょうか。

    VB 書けないので、C# で書くと

    public static VlatileSettings
    {
      public static HogeValue { get; set; }
    }

    みたいな感じです。

    • 回答としてマーク tohosaku 2009年9月28日 23:55
    2009年9月28日 7:42
  • 通常のクラスですとインスタンスを作成しなければいけません。Sharedを付けたプロパティはアプリケーション全体からインスタンスを作成することなく共通でアクセスできます。アプリケーション全体で使用できるということは逆に言えば見通しが悪くなるということですので、使用には気を付ける必要があります。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク tohosaku 2009年9月28日 23:55
    2009年9月28日 8:02
    モデレータ
  • trapemiyaさん、渋木宏明さん、ありがとうございます。
    Application のプロパティにする必要はなく、データアクセス用のクラスを一つ作れば良かったんですね。

    アプリケーション全体で使用できるということは逆に言えば見通しが悪くなるということですので、使用には気を付ける必要があります。

    おっしゃる通りだと思います。使いどころについては気をつけたいと思います。
    ありがとうございました。
    2009年9月28日 10:53