2017-09-25 4 views
1

ケース:私はplcから値を読み取るプログラムを作成しています。これらの値を読み取るために、設定タブが入力されます。この設定タブは、すべての値をarraylistに入れます。プログラムが終了すると、彼は自分の設定データをすべて失います。私はこの設定データを保持する機能を作りたいと思います。私はこのようなことを全く知らないし、あなたが回答やサンプルコードを持っているのであれば私は不思議です。私は完全なarraylistを格納することを考えていた、私はこれを開くときに読んで。何かファイル。後で使用するための値の保存

ご覧のとおり、iveは既にメニューを作成しました。

アライリスト名= allData。

arraylistsは、このデータをDataPerLabelという名前のオブジェクトに受け入れます。

設定]タブ:

Configuration tab

クラスDataPerLabel:

class DataPerLabel 
{ 
    public String labelName; 
    public String labelAdress; 
    public String dataType; 
    public bool monitor; 

    public DataPerLabel(String labelName, String labelAdress, String dataType, bool monitor) 
    { 
     this.labelName = labelName; 
     this.labelAdress = labelAdress; 
     this.dataType = dataType; 
     this.monitor = monitor; 
    } 

    public String getLabelName() 
    { 
     return labelName; 
    } 

    public String getLabelAdress() 
    { 
     return labelAdress; 
    } 

    public String getDataType() 
    { 
     return dataType; 
    } 

    public bool getMonitor() 
    { 
     return monitor; 
    } 
} 

私は今これを試してみたの.iniファイルまたは.txt FIL

でこのArrayListのを保存します:

private void menuItemSave_Click(object sender, System.EventArgs e) 
    { 
     string yourFilePath = @"C:\\Users\\Gebruiker\\Desktop\\WindowsHMI\\"; 

     XmlSerializer serializer = new XmlSerializer(typeof(DataPerLabel)); 

     foreach (DataPerLabel configRecord in allData) 
     { 
      using (XmlWriter writer = XmlWriter.Create(yourFilePath, new XmlWriterSettings() { Indent = true })) 
      { 
       serializer.Serialize(writer, configRecord); 
      } 
     } 
    } 

エラーが表示されます。パラメータなしのコンストラクタがないため、すべてのDataPerLabelでシリアル化できません。

、誰もがあなたがXML文字列としてデータを保存することができ、

おかげ

+1

あなたはapp.configを、ユーザの設定ファイルにファイルを保存するになります使用し

[ConfigurationManager](https://msdn.microsoft.com/de-de/library/system.configuration.configurationmanager(v = vs.110).aspx)を使用してください。 –

+0

私は完全に新しいと学生そう、感謝とにかく言ったように、私はそれをチェックさせて! – NielsSchutte

+0

ファイルにarraylist全体を格納する作業は、シリアライズを使用して簡単に実行し、デシリアライズを使用して起動時に再度ロードします。しかし、私はむしろ@MarkusDeibelの設定ファイルにデータを保存することを提案するつもりです。設定タブのデータがユーザーごとに異なる場合は、データをユーザー設定として保存します。設定ファイルに保存するすべてのユーザーに同じデータが保存されます。 – elloco999

答えて

0

この方法!

https://www.newtonsoft.com/json

ショップリスト:

List<DataPerLabel> lst = new List<DataPerLabel>(); 
string json = JsonConvert.SerializeObject(lst); 
File.WriteAllText("path", json); 

をリストを読む:

string json = File.ReadAllText("path"); 
List<DataPerLabel> lst = JsonConvert.DeserializeObject<List<DataPerLabel>>(json); 
+0

jsonオブジェクトを保存する必要があるファイルのタイプは何ですか?それとも自動的に作成するのですか? 文字列パス= @ "C:\\ Users \\ Gebruiker \\ Desktop \\ WindowsHMI \\"; は正しく機能しませんか? – NielsSchutte

+0

これはtxtファイルを作成するため、パス\\ filenameを指定する必要があります –

0

を助けることを願って:

List<DataPerLabel> _dataPerLabelList; // this is your data object. 

. 
. 
. 

// on saving: 

XmlSerializer serializer = new XmlSerializer(typeof(List<DataPerLabel>)); 

using (XmlWriter writer = XmlWriter.Create(yourFilePath, new XmlWriterSettings() { Indent = true })) 
{ 
     serializer.Serialize(writer, _dataPerLabelList); 
} 

. 
. 
. 


// on loading your form: 
XmlSerializer deserializer = new XmlSerializer(typeof(List<DataPerLabel>)); 

using (XmlReader reader = XmlReader.Create(yourFilePath)) 
{ 
     _dataPerLabelList = (List<DataPerLabel>)deserializer.Deserialize(reader); 
} 

:あなたのリストは、同じタイプのオブジェクトが含まれているので、私は思いますArrayListを使用する必要はなく、代わりにList<DataPerLabel>を使用することができます。

+0

私のフォームをロードするとき、どのように私はこのデータをすべて同じarraylist allDataに入れますか? – NielsSchutte

+0

あなたのリストには1つのオブジェクトタイプしか含まれていないので、ArrayListの代わりにList <>を使う方が良いと思います。 –

関連する問題