0

例如,我希望能够在 Form1 构造函数中键入: Options_DB.Save 类似的东西或 Options_DB.Save(true) 或 (false) 因此,如果它为 false,则该类将不会根据我在 Form1 中所做的所有设置生效Options_DB,如果它为真,它将生效并执行类 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 类添加一个公共 bool 字段,创建一个接受参数并设置它的构造函数,然后检查访问 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;打开。可能在构造 ( static OptionsDB()) 中设置初始值。

最后,你真的可以改变你的 get 和 set 方法来使用Accessors。就像我使用的 Get 和 Set 一样。--侧面建议;只是因为你可以

于 2012-09-19T06:49:24.473 回答