0

たとえば、Form1 コンストラクターで次のように入力できるようにしたい: Options_DB であり、true の場合は有効になり、クラス Options_DB 内のすべてのことを行います。

これはクラス Options_DB です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DannyGeneral;
using System.IO;
using System.Windows.Forms;

namespace GatherLinks
{
    static class OptionsDB
    {
        static string changeWebsite;
        static bool downloadImages;
        static bool localOnly;
        static decimal num1;
        static string num1_numricupdown;
        static string path_exe;
        static string path_settings;
        static string settings_file;
        static string settings_dir;
        static OptionsFile setting_file;

        static OptionsDB()
        {
            path_exe = Path.GetDirectoryName(Application.LocalUserAppDataPath);

            path_settings = Path.GetDirectoryName(Application.LocalUserAppDataPath);
            settings_file = "\\settings.txt";
            settings_dir = path_settings + @"\settings";
            setting_file = new OptionsFile(settings_dir + settings_file);

            // ---- L O A D I N G   A L L   K E Y S ---- \\

            changeWebsite = setting_file.GetKey("changeWebSite");
        }
        // ---- FUNCTIONS GET AND SET ---- \\

        public static string get_changedWebSite()
        {
            return changeWebsite;
        }

        public static void set_changeWebSite(string website)
        {
            changeWebsite = website;
            setting_file.SetKey("changeWebSite", changeWebsite);

        }
    }
}

そして、たとえば次のように Form1 で使用しています。

Form1 コンストラクターで:

mainUrl =  OptionsDB.get_changedWebSite();

そして、button2 クリック イベントで:

private void button2_Click(object sender, EventArgs e)
        {
            cl = new ChangeLink();
            cl.StartPosition = FormStartPosition.CenterParent;
            DialogResult dr = cl.ShowDialog(this);
            if (dr == DialogResult.Cancel)
            {
                cl.Close();
            }
            else if (dr == DialogResult.OK)
            {    
                    label4.Text = cl.getText();
                    mainUrl = cl.getText();
                    OptionsDB.set_changeWebSite(cl.getText());
                    cl.Close();
            } 


        }

Options_DB.get を実行する前に、Form1 コンストラクターで... Options_DB のプロパティ、またはクラスを新しいクラスにするかどうかを教えてくれる何かを追加したいと思います。このクラスは、チェックボックスなどのすべてのオプションをテキストファイルに保存するためにすでに多くの時間を費やしているため、プログラムを実行すると、変更した設定が記憶されます。

ここで、行った変更を保存するか保存しないかをプログラムに伝えるプロパティが必要です。

4

2 に答える 2

0

正しければ(ただし、あなたがやろうとしていることを本当に理解しているかどうかはわかりません)、Form1クラスにpublic boolフィールドを追加し、parmを受け入れるコンストラクターを作成して設定し、チェックするだけです。 OptionsDBにアクセスする前のその値。フィールドにアクセスする前に、フィールドを設定する必要があることに注意してください。これは、新しいコンストラクターでOptionsDBにアクセスする行を移動し、デフォルトのコンストラクターを使用しないようにする必要があることを意味します。

このようなもの(少なくとも出発点として):

    private bool useOptionsDB; 
    private Form1() // private to be sure you don't use it
    {
        InitializeComponent();
    }

    public Form1(bool useOptions)
        : this()
    {
        useOptionsDB = useOptions;
        // your stuff
        if (useOptionsDB)
            mainUrl = OptionsDB.get_changedWebSite();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        cl = new ChangeLink();
        cl.StartPosition = FormStartPosition.CenterParent;
        DialogResult dr = cl.ShowDialog(this);
        if (dr == DialogResult.Cancel)
        {
            cl.Close();
        }
        else if (dr == DialogResult.OK && useOptionsDB) // <- add check on the bool field
        {
            label4.Text = cl.getText();
            mainUrl = cl.getText();
            OptionsDB.set_changeWebSite(cl.getText());
            cl.Close();
        }
    }
于 2012-09-19T06:43:38.623 に答える
0

これがあなたの質問に基づいて私ができる最善のことです。あなたの質問を読む/理解するのは難しいです

private static bool isActive; // The new property; put it with the rest of the statics
public static string get_changedWebSite()
{
    return changeWebsite;
}

public static void set_changeWebSite(string website)
{
    if (isActive) // Check if it is active or not
    {
        changeWebsite = website;
        setting_file.SetKey("changeWebSite", changeWebsite);
    }
}

public bool IsActive // Get and set
{ 
  get
  {
     return isActive;
  } 
  set
  {
      isActive = value;
  } 
}

Form1書くだけでオフOptionsDB.IsActive = false;に。OptionsDB.IsActive = true;スイッチをつける。おそらくconstuctur(static OptionsDB())に初期値を設定します。

最後に、実際には get メソッドと set メソッドを変更してAccessorsを使用することができます。私が使用した Get と Set のように。--サイドアドバイス; できるからといって

于 2012-09-19T06:49:24.473 に答える