2017-09-02 20 views
0

私のVS2013 VBアプリケーションは現在、レジストリに設定を保存しており、これは私にとって気になるところまで成長しています。だから私はファイルに設定(文字列)を保存したい。ボーナスは、ネットワークに接続して複数のユーザーが使用できることです。何百、何千もの線があるかもしれません。使用するのに適した形式は何ですか?古いINI、CSV、XML?私が見る限り、設定ファイルはこの場合には良い選択肢ではないようです。カスタム設定を保存する最も効率的な方法

+1

を通してそれを使用してください*設定ファイルは良いように表示されません。この場合のオプション*なぜですか? – Plutonix

+0

何が保存されるのかが分からず、彼らはネットワークではなくローカルシステムにあります。 – Terabithia

+0

最初の部分が何を意味するのか分かりません。解決すべき問題についての明確な説明はありませんが、a)INIファイルは少なくとも2003年以来時代遅れです。 b)* user *設定に* system *レジストリを使用することは、長い間、悪い考えでした。 c)設定は、ローカルまたはローミングに長時間設定することができます。d)カスタム設定プロバイダを使用して、IDE UIを使用することもできますが、必要な操作を行うことができます。最後の手段としてあなたが受け入れた答えのようなものがあります – Plutonix

答えて

0

クラスのオブジェクトを作成し、XML for .NETアプリケーションにシリアル化を使用することを強くお勧めします。実装が容易で、完全にサポートされており、あるコンピュータから別のコンピュータに設定をインポートおよびエクスポートできます。ネットワークからの設定を準備するようにアプリケーションを設定することもできます。さらに、将来のプログラミング/アップグレードを容易にします。

ここでは、実例(テスト済み)をリストしています。このコードは2012年以降に使用されており、エンタープライズレベルのアプリケーションには完全に対応しています。

注:自分自身を追加するために、デモ用の「設定項目」を1つだけ含めました。

まず:設定またはオプションクラス:

Imports System.Xml.Serialization 
Imports System.IO 

<Serializable()> _ 
Public Class Options 

    Public KEYS_USE_LISTS As Boolean 

    Public Sub New() 
     KEYS_USE_LISTS = True 
    End Sub 

#Region "Methods" 

    Public Sub Save(ByVal Path As String) 
     Try 
      Dim _XMLSerilizer As New XmlSerializer(GetType(Options)) 
      Dim _StreamWriter As New StreamWriter(Path) 
      _XMLSerilizer.Serialize(_StreamWriter, Me) 
      _StreamWriter.Close() 
     Catch ex As Exception 
      MsgBox("Error saving database setting." & vbCrLf & "Internal Error: " & ex.Message) 
     End Try 
    End Sub 

    Public Function DoLoad(ByVal Path As String) As Options 
     Dim _Opt As New Options 
     Try 
      If IO.File.Exists(Path) Then 
       Dim _XMLSerilizer As New XmlSerializer(GetType(Options)) 
       Dim _FileStream As New FileStream(Path, FileMode.Open) 

       _Opt = DirectCast(_XMLSerilizer.Deserialize(_FileStream), Options) 
       _FileStream.Close() 
      End If 
     Catch ex As Exception 
      MsgBox("Error loading database setting." & vbCrLf & "Internal Error: " & ex.Message) 
     End Try 
     Return _Opt 
    End Function 

#End Region 


End Class 

第二:インタフェース(例えばリサイズ)

Public Class frmOptions 



    Public _options As New Options 

    Private Sub frmOptions_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     If IO.File.Exists(Application.StartupPath & "/_Options.opt") Then 
      _options = _options.DoLoad(Application.StartupPath & "/_Options.opt") 
     End If 

     chkUseList.Checked = _options.KEYS_USE_LISTS 

    End Sub 

    Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click 

     If IO.File.Exists(Application.StartupPath & "/_Options.opt") Then 
      _options = _options.DoLoad(Application.StartupPath & "/_Options.opt") 
     End If 

     _options.KEYS_USE_LISTS = chkUseList.Checked 
     _options.Save(Application.StartupPath & "/_Options.opt") 

     Me.DialogResult = Windows.Forms.DialogResult.OK 
     Me.Close() 

    End Sub 



End Class 
+2

なぜ変数名の先頭にアンダースコアがありますか?これはVB.NETの命名規則(特に 'Public'の命名規則)に反するものです。また、「Dim _StreamWriter ...」と「Dim _FileStream ...」の代わりに、[** 'Using'ブロック**](https://docs.microsoft.com/en-us/dotnet/visual)に入れてください。 -basic/language-reference/statements/using-statement)を参照してください。 –

+0

有効なコメント、Thanx! –

関連する問題