2009-07-30 11 views
2

私はASP.NETアプリケーションで、「変数短期」永続性の最善の方法を信じては、以下のとおりです。のWinFormアプリのデータ持続性(C#の)

  1. 変数セッション(セッションスコープ)
  2. アプリケーション変数(アプリケーションスコープ)
  3. ページビュー(ページスコープ)
  4. アプリケーション設定(アプリケーションスコープ)
  5. ???

のためのWindowsフォームアプリケーションで、 "変数短期" 永続性の最善の方法は何:

  1. Formスコープ
  2. ユーザーセッションスコープ
  3. アプリケーショングローバルスコープ

ありがとう

+0

私の要件は、アプリケーションのライフサイクルのどの時点(つまり、どのような形式でも)でアクセスして変更できるデータを保存するためのプレースホルダが必要です。私はプロパティ/メソッドが定義されたフォームにアクセスする必要はありません。 – Bhaskar

+0

UI以外のデータの場合は、フォームに定義しないでください。別のオブジェクトを考えてみましょう。たぶん、シングルトンのパターンを調べます。 –

+0

だから、基本的に私は2つの方法を使ってそれを達成することができます: 1)私は静的メソッド/クラスを作成し、その中にデータを設定してアプリケーション全体にアクセスできます。 2)設定(Namespace.Properties.Settings.Default。)を使用できます。アプリケーション設定は実行時に「読み取り専用」に公開されますが、ユーザー設定は読み書き可能です。 Henkとmodosansrevesに感謝します。 – Bhaskar

答えて

2

を右クリックし、プロジェクト参照VSでのプロジェクトのプロパティを見ると、プロパティ - > [設定]を選択します。名前、タイプ、およびスコープ(ユーザー全体またはアプリケーション全体)を指定して、永続フィールド(つまり設定)を編集できます。

コードから<によってアクセスできます。デフォルトのネームスペース> .Properties.Settings.Default。

設定はアプリケーション実行の間中永続的です。

フォームスコープにもこれらの設定を使用する必要があります。

これらの設定はすべて、アプリケーション実行間で永続的な値を格納するのに意味があります。 1つのプログラムインスタンス内にデータを格納するには、通常(静的)フィールドを使用します。

+0

実行時にデータを設定することはできますか? – Bhaskar

+0

生成されたSettingsクラスを適切なプロパティで取得します。確かに、実行時にそれらを変更します。実行時に「カスタム」プロパティを取得するために、キー値の辞書を用意しても構いません。 –

3

まあ、 "Form Sco単にフィールドやプロパティを使うことができます。アプリケーションの設定やセッションの設定には、(静的な)クラスなどを使うことができます。

実際には、WinFormsアプリケーションではアプリケーションとセッションの違いはなく、もうサーバー上ではないことに注意してください。

0

フォームでのみアクセスできる変数の場合、私はそれらをプライベートフィールドにします。 Winフォームアプリケーションには「セッション」のようなものはありませんが、CallContextを使用すると、HttpContextとしてセッションをシミュレートし、Webアプリケーションのセッションはこのクラスをベースにしています。

グローバルなものは、おそらくアプリケーションオブジェクト自体またはアプリケーション構成ファイルに格納されます。

0

私は、オブジェクトライフサイクルの境界を越えて持続することを絶対に確信しているわけではありませんが、Henkが述べたように、フォームにはロードされている期間の有効範囲があり、フォームがインスタンス化されるときにコードによって初期化され、フォームがアンロードされるまで続きます。次のスコープアップは、実際にはApplicationオブジェクト(何らかの種類のカスタムコンテナクラスにフォームをラップする場合を除く)で、アプリケーションのライフサイクルのプロパティ(および本質的にApplicationオブジェクト)を追加できます。

アプリケーションのスコープを超えて存続するには、Propertiesクラスを使用するか、(適切に識別され、指定された場所に)レジストリにデータを格納します。

手続き的に考えているように思えますが、グローバル変数(または少なくともメソッドまたはオブジェクトスコープよりも大きい)の永続性のように聞こえるかもしれません。変数の観点から考えるのではなく、それらのオブジェクトのオブジェクトとプロパティの観点から考えてください。あなたのオブジェクトモデルを正しく設計したら、適切なプロパティの永続性はそれの関数でなければなりません。