3

アプリの設定を保存するクラスがあります。アプリのときにインスタンス化されます。アプリが実行され、保存されます。閉じます。

public class Settings
{
    public bool showPrivacyPageOnBlogs;
    public bool showTermsPageOnBlogs;
    public bool showDisclosurePageOnBlogs;
}

また、ポップアップウィンドウのパブリックプロパティを使用してこれらの値を設定するためのチェックボックスを表示するポップアップウィンドウがあります。

ポップアップウィンドウを処理するコードは次のようになります。

// Horrible code ahead
private void pagesSettingsToolStripMenuItem1_Click(object sender, EventArgs e)
{
    pagesSettingsForm.showPrivacyPageOnBlogs = settings.showPrivacyPageOnBlogs;
    pagesSettingsForm.showTermsPageOnBlogs = settings.showTermsPageOnBlogs;
    pagesSettingsForm.showDisclosurePageOnBlogs = settings.showDisclosurePageOnBlogs;
    if (pagesSettingsForm.ShowDialog() == DialogResult.OK)
    {
        settings.showPrivacyPageOnBlogs = pagesSettingsForm.showPrivacyPageOnBlogs;
        settings.showTermsPageOnBlogs = pagesSettingsForm.showTermsPageOnBlogs;
        settings.showDisclosurePageOnBlogs = pagesSettingsForm.showDisclosurePageOnBlogs;
    }
    pagesSettingsForm.Dispose();
}

私のアプリでは。この方法で処理されるパラメーターは他にもいくつかあるので、このコードを単純化して設定の名前を列挙し、将来追加のパラメーターを追加できるようにする方法があるかどうかを知りたいと思います。

4

3 に答える 3

2

私はそれを試していませんが、Automapperがこれを処理できると強く信じています。私はそれがあなたのコードをこのようにするかもしれないと思います:

// Horrible code ahead
private void pagesSettingsToolStripMenuItem1_Click(object sender, EventArgs e)
{
    Mapper.Map(settings, pagesSettingsForm);
    if (pagesSettingsForm.ShowDialog() == DialogResult.OK)
        Mapper.Map(pagesSettingsForm, settings);
    pagesSettingsForm.Dispose();
}    

PS:あなたがコードがひどいと言ったことは知っていますが、他のコードでインスタンス化されたフォームを破棄していることは言うまでもありません-それは間違っています、IMO。

于 2011-11-27T16:37:06.617 に答える
2

ゲッターとセッターを使用して、フォームに設定タイプのプロパティを公開させるだけです。これにより、設定にメンバーを追加するときに変更を加えることなく、投稿したスニペットがシンプルになります。作業はフォームの実装に移ります。PropertyGridは汎用オブジェクトエディタであり、あなたのケースで十分に使用できるかどうかを推測するのは難しいです。

于 2011-11-27T17:04:55.860 に答える
1

辞書を使う

Dictionary<String,dynamic> 

タイピングを延期するのでいいでしょう

したがって、アプリごとに必要なすべての設定について、設定クラスに設定を追加/設定します。フォームには独自のインスタンスがありますが、必要なものだけがあります。次に、渡されたsettingswで同じ名前のバージョンのform.settingsをスキャンして、それらを上書きするだけです。

于 2011-11-27T16:51:26.680 に答える