2009-05-13 15 views
0

現在、私はVisual Studio 2008とC#を使用して階層化されたアーキテクチャを使用するソフトウェアを開発しています。 そのシステムでは、必要なときにメッセージボックスを使って表示されるすべてのテキストメッセージをXMLファイルに保存して、メッセージを更新するとシステム全体をコンパイルする必要がなくなります。どうすればこれを達成できますか? XMLファイル構造は何ですか? C#コードからメッセージがどのように呼び出されますか?記述して例を挙げてください。おかげさまで XMLファイルからテキストメッセージを呼び出す

答えて

1

シナリオに適したものは、リソースサテライトDLLです。これは、アプリケーションに動的にロードされる一連のresouresを含む別個のDLLです。これは、多くの異なるアプリケーションがローカリゼーションを行う方法です。最も重要なのは、このタイプの機能をサポートするツールが数多くあることです。

メッセージを変更するには、単にこのDLLを変更する必要があります。これはコンパイルになりますが、リソースではなくシステムでのみ行われます。

0

あなたは、あなたのメッセージを保存するために、あなたのapp.configファイルに独自のカスタムセクションを追加したい場合があります。ただし、メッセージが変更されるたびにapp.configファイルを更新する必要があります。

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsection.aspx

+0

。むしろ、メッセージを格納するために別のXMLファイル(たとえば、Messages.xml)を使用したいと思います。 –

+0

次に、XMLシリアル化を使用してXMLファイルのメッセージをMessageオブジェクトの配列に変換することができます。 http://www.dotnetjunkies.com/QuickStartv20/howto/doc/xmlserialization/RWObjFromXML.aspx – Jeremy

1

私はIDとメッセージ(および任意の他、あなたが必要とする)を格納するために、.NETのDataSetとDataTableのを使用するクラスを作成します。

このように、DataSet.WriteXML()およびDataSet.ReadXML()を使用して、指定したファイル名からセーブ/ロードすることができ、XML形式を自分で手作業で作成する心配はありません。

この

は用意しておくと便利クラスのように聞こえたので、私は「コンセプトの証明」として1を書いた:私は、app.configファイルにメッセージを保存したいいけない

'************************************************************************* 
' Class: MsgFile 
' Author: Ron Savage 
' Date: 05/14/2009 
' 
' This class is an example for using an XML file to hold messages to be 
' displayed by an application. 
' 
' Modification History 
' Date  Init Comment 
' 05/14/2009 RS Created. 
'************************************************************************* 
Imports Microsoft.VisualBasic 
Imports System.IO 

Public Class MsgFile 
    '************************************************************************* 
    ' Class Variables 
    '************************************************************************* 
    Private MsgFile As String 
    Private msgData As DataSet 
    Private msgTable As DataTable 

    '************************************************************************* 
    '  Sub: New() 
    ' Author: Ron Savage 
    ' Date: 05/14/2009 
    ' 
    ' Creates a new MsgFile from an existing file, or creates an empty one 
    ' with the specified file name. 
    '************************************************************************* 
    Sub New(ByVal msg_File As String) 
     Dim srcFile As New FileInfo(msg_File) 

     If (srcFile.Exists()) Then 
     msgData = New DataSet() 

     Load(msg_File) 
     Else 
     NewFile(msg_File) 
     End If 
    End Sub 

    '************************************************************************* 
    '  Sub: NewFile() 
    ' Author: Ron Savage 
    ' Date: 05/14/2009 
    ' 
    ' Creates a new XML message file. 
    '************************************************************************* 
    Sub NewFile(ByVal msg_File As String) 
     Me.MsgFile = msg_File 

     If (IsNothing(msgData)) Then 
     msgData = New DataSet("MyAppMessages") 
     msgTable = New DataTable("Messages") 

     msgTable.Columns.Add(New DataColumn("Id", GetType(System.Int32), Nothing, MappingType.Attribute)) 
     msgTable.Columns.Add(New DataColumn("Text", GetType(System.String), Nothing, MappingType.Attribute)) 

     msgData.Tables.Add(msgTable) 

     setMessage(0, "New file created") 
     End If 

     Save() 
    End Sub 

    '************************************************************************* 
    '  Sub: Load() 
    ' Author: Ron Savage 
    ' Date: 05/14/2009 
    ' 
    ' Loads an existing XML message file into the dataset. 
    '************************************************************************* 
    Public Sub Load(ByVal msgFileName As String) 
     Dim srcFile As FileInfo = Nothing 
     Me.MsgFile = msgFileName 

     srcFile = New FileInfo(msgFileName) 

     msgData.Clear() 

     If (srcFile.Exists()) Then 
     msgData.ReadXml(msgFileName) 

     msgTable = msgData.Tables("Messages") 
     End If 
    End Sub 

    '************************************************************************* 
    '  Sub: Save() 
    ' Author: Ron Savage 
    ' Date: 10/05/2008 
    ' 
    ' This routine saves the DataSet to an XML file. 
    '************************************************************************* 
    Public Overridable Sub Save() 
     If (Not IsNothing(msgData) And Not MsgFile.Equals("")) Then 
     Dim fileWriter As StreamWriter = New StreamWriter(MsgFile) 


     msgData.WriteXml(fileWriter) 

     fileWriter.Close() 
     End If 
    End Sub 

    '************************************************************************* 
    '  Sub: getMessage() 
    ' Author: Ron Savage 
    ' Date: 05/14/2009 
    ' 
    ' This gets the text of the message. 
    '************************************************************************* 
    Public Function getMessage(ByVal msgId As String) As String 
     Dim rowsFound() As System.Data.DataRow 
     Dim msgText As String = "" 

     If (Not IsNothing(msgTable)) Then 
     rowsFound = msgTable.Select("Id = " + msgId.ToString) 

     If (rowsFound.Length > 0) Then 
      msgText = rowsFound(0).Item("Text").ToString 
     End If 

     End If 
     Return (msgText) 
    End Function 

    '************************************************************************* 
    '  Sub: setMessage() 
    ' Author: Ron Savage 
    ' Date: 05/14/2009 
    ' 
    ' This sets the text of the message. 
    '************************************************************************* 
    Public Sub setMessage(ByVal msgId As Integer, ByVal msgText As String) 
     Dim rowsFound() As System.Data.DataRow 
     Dim msgRow As System.Data.DataRow 

     If (Not IsNothing(msgTable)) Then 
     rowsFound = msgTable.Select("Id = " + msgId.ToString) 

     If (rowsFound.Length > 0) Then 
      msgRow = rowsFound(0) 

      msgRow.Item("Id") = msgId 
      msgRow.Item("Text") = msgText 
     Else 
      msgRow = msgTable.NewRow() 

      msgRow.Item("Id") = msgId 
      msgRow.Item("Text") = msgText 

      msgTable.Rows.Add(msgRow) 
     End If 
     End If 

     Save() 
    End Sub 
End Class 
関連する問題