10

アプリケーションを作成していて、ユーザーが選択したファイルのリストを保存したいと考えています。現在、私の設定の 1 つは filesToFetch と呼ばれる StringCollection です。これはユーザー スコープであり、プログラムが取得する必要があるすべてのファイルのパスが含まれています。ユーザーが新しいファイルをリストに追加できるボタンがあります。これはボタンクリックイベントのコードです

private void button1_Click(object sender, EventArgs e)
{
    DialogResult result = openFileDialog1.ShowDialog();
    if (result == DialogResult.OK)
    {
        Properties.Settings.Default.filesToFetch.Add(openFileDialog1.FileName);
        Properties.Settings.Default.Save();
    }
}

StringCollection に新しいファイルを追加しようとすると、エラーが発生します

NullReference 例外が処理されませんでした

オブジェクト参照がオブジェクト インスタンスに設定されていません。

filesToFetch が初期化されていないため、これが発生している可能性があると思いますが、よくわかりません。私は間違っているかもしれませんが、オブジェクトは初期化時に名前が付けられると思っていました。私の設定はすべて設計時に名前が付けられるため、プログラムの実行時に自動的に初期化されると想定していましたが、今では間違っている可能性があると思いますこれについて。これが問題ですか、それとも他に何か不足していますか?

参照用に私の設定のスクリーン キャプチャを次に示します。

プロパティ設定

4

4 に答える 4

17

設定 GUI で値を入力する場合、右端に「...」ボタンがあり、1 行に区切られた初期文字列値を入力できます。次に、それを次のように XML に変換します。

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <string>String1</string>
  <string>String2</string>
</ArrayOfString>

編集: はい、StringCollection を初期化する必要があります。上記の答えは、GUI を使用してそれを行う方法です。OPが必要とするようなStringCollection設定を初期化する方法を探してこの投稿に出くわした人々(私のような)に役立つと思いました。

于 2014-06-18T01:28:34.847 に答える
3

おそらくもう少し説明する必要があります。文字列のリストを使用するとします。次のことを宣言できます。

IList<string> a;

この時点で a = null と null には Add メソッドがありません。初期化する場合:

IList<string> a = new List<string>();

今 a = 文字列の空のリスト。この時点で、リストに文字列を追加するために使用する Add メソッドがあります。

于 2012-11-16T15:49:31.820 に答える
0

add メソッドを使用して同様の問題が発生しましたが、インデックスと値のパラメーターを使用した挿入は正常に機能しました。

https://msdn.microsoft.com/en-us/library/system.collections.specialized.stringcollection.insert%28v=vs.110%29.aspx

このようなものがうまくいくかもしれません:

private void button1_Click(object sender, EventArgs e)
{
    DialogResult result = openFileDialog1.ShowDialog();
    if (openFileDialog1.ShowDialog(this) != DialogResult.OK)
        return;
    int x = 0;
    foreach (String file in openFileDialog1.FileNames)
    {
        Properties.Settings.Default.activeFiles.Insert(x, openFileDialog1.Filename);
        x++;
    }

    Properties.Settings.Default.Save();
}
于 2015-04-30T04:36:53.873 に答える