2

LogMeInバックアップ(Windowsフォームベースのプログラム)を使用してバックアップチェックを自動化するプログラムに取り組んでいます。情報を簡単に保存するために、ユーザー設定を保存する方法が必要です。やや「組み込み」のアプリケーション/ユーザー設定を使用したことはなく、試してみることにしましたが、問題が発生しました。

今のところ4つの設定を追加しました:IncludeCriteria(Specialized.StringCollection)ExcludeCriteria(Specialized.StringCollection)ReportPath(string)ReportType(int)

しかし、動作は期待どおりに機能しません(図を参照)。プログラムにいくつかの値を保存した後、VS2008設定エディターを使用して設定値の編集/表示に戻ります。私の値はどれも保存されません。これは、これらの値が単なるデフォルト値であるためかもしれないと思いますが、それを保存/読み取り/変更できる場所ではないでしょうか。

これが私のロードフォームコードです(まだ非常に洗練されていません):

private void setupForm()
    {
        txtPath.Text = BackupReport.Properties.Settings.Default.ReportPath == null ? "" : BackupReport.Properties.Settings.Default.ReportPath;

        if (BackupReport.Properties.Settings.Default.ReportType == 0)
        {
            radioHTML.Checked = true;
        }
        else
            radioExcel.Checked = true;

        if (BackupReport.Properties.Settings.Default.IncludeCriteria.Count > 0)
        {
            listIncludeCriteria.DataSource = Properties.Settings.Default.IncludeCriteria;


            //foreach (string s in Properties.Settings.Default.IncludeCriteria)
            //    listIncludeCriteria.Items.Add(s);
        }

        if (BackupReport.Properties.Settings.Default.ExcludeCriteria.Count > 0)
        {
            listExcludeCriteria.DataSource = BackupReport.Properties.Settings.Default.ExcludeCriteria;

            //foreach (string s in Properties.Settings.Default.ExcludeCriteria)
            //    listExcludeCriteria.Items.Add(s);
        }





    }

listIncludeCriteriaは単なるリストボックスです。ユーザーが保存するときに、このメソッドを呼び出します。

private void saveSettings()
    {
        //var settings =  BackupReport.Properties.Settings;
        if (txtPath.Text != "")
        {
            BackupReport.Properties.Settings.Default.ReportPath = txtPath.Text;

        }

        if (listIncludeCriteria.Items.Count > 0)
        {
            //BackupReport.Properties.Settings.Default.IncludeCriteria = (StringCollection)listIncludeCriteria.Items.AsQueryable();


            foreach (var i in listIncludeCriteria.Items)
            {
                if (!isIncludeDuplicate(i.ToString()))
                    BackupReport.Properties.Settings.Default.IncludeCriteria.Add(i.ToString());
            }

        }

        if (listExcludeCriteria.Items.Count > 0)
        {

            //BackupReport.Properties.Settings.Default.ExcludeCriteria = (StringCollection)listExcludeCriteria.Items.AsQueryable();

            foreach (var i in listExcludeCriteria.Items)
            {
                if (!isExcludeDuplicate(i.ToString()))
                    Properties.Settings.Default.ExcludeCriteria.Add(i.ToString());
            }

        }

        if (radioExcel.Checked == true)
            BackupReport.Properties.Settings.Default.ReportType = 1;
        else
            BackupReport.Properties.Settings.Default.ReportType = 0;


        BackupReport.Properties.Settings.Default.Save();
        //Properties.Settings.Default.Save();
        this.DialogResult = DialogResult.OK;
        this.Close();



    }

奇妙なことに、フォームが読み込まれると、最初に入力したパス(ReportPath)が表示されます(listBoxにも入力したがらくたがたくさんあります)が、これらの値はどこにも見つかりません。

どんな助けでもいただければ幸いです!

ジョシュ

4

1 に答える 1

4

編集/追加後に保存する必要があります

Settings.Default.Save();

私がよく使う簡単な例

private void Main_Load(object sender, EventArgs e)
{
    this.Location = Settings.Default.WindowLocation;
}

private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
    Settings.Default.WindowLocation = this.Location;
    Settings.Default.Save();
}
于 2010-05-16T02:24:44.517 に答える