应用程序设置更新时如何更改部分类中的静态变量?

时间:2015-10-27 16:19:04

标签: c# winforms

我有一个Modal表单,用户可以在其中输入数据库连接字符串。在主窗体上,它获取在Modal窗体上输入的字符串的值。

问题是,当我更改模态窗体中的设置并保存它时,它在程序运行时不会更新。程序必须重新启动才能使更改生效。

public partial class EbayListing : Form
{
    static string DBServer = Properties.Settings.Default.DBServer;
    static string DBName = Properties.Settings.Default.DBName;
    static string UName = Properties.Settings.Default.UName;
    static string PWord = Properties.Settings.Default.PWord;

    static string conString = "SERVER=" + DBServer + ";" + "DATABASE=" + DBName + ";" + "UID=" + UName + ";" + "PASSWORD=" + PWord + ";";

    MySqlConnection con = new MySqlConnection(conString);
    MySqlCommand cmd;
    MySqlDataAdapter adapter;
    DataTable dt = new DataTable();
}

每次设置从模态窗体更改时,我都需要更新静态字符串。

2 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是实现INotifyPropertyChanged,当其中一个字符串发生更改时,您将更新静态变量的相应部分。

答案 1 :(得分:0)

使用属性

static string conString
{
   get
   {
       return "SERVER=" + DBServer + ";" + "DATABASE=" + DBName + ";" + "UID=" + UName + ";" + "PASSWORD=" + PWord + ";";
    }
 }

顺便说一下。我会使用ConnectionStringBuilder类吗?

static string conString
{
     get
     {
         var builder = new MySqlConnectionStringBuilder();
         builder.Server = DBServer;
         builder.UserID = UName;
         builder.Password = PWord;
         builder.Database = DBName;
         return builder.ToString();
     }
}

要填充字段,您也可以创建属性

public string DBServer { get { return Properties.Settings.Default.DBServer } }

或(因为ApplicationSettingsBase已实现INotifyPropertyChanged)您可以使用此内容创建新文件Settings.partial.cs

internal sealed partial class Settings
{
    internal Settings()
    {
        this.PropertyChanged += Settings_PropertyChanged;
    }

    void Settings_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        if (e.PropertyName.Equals("DBServer"))
            EbayListing.DBServer = this.DBServer;
        else if (e.PropertyName.Equals("DBName"))
            EbayListing.DBName = this.DBName;
    }
}

无论如何,我建议你完全放弃静态变量的整个概念,并在EbayListing

中创建一个方法
private MySqlConnection CreateConnection()
{
     var builder = new MySqlConnectionStringBuilder();
     builder.Server = Properties.Settings.Default.DBServer,
     builder.UserID = Properties.Settings.Default.UName,
     builder.Password = Properties.Settings.Default.PWord, 
     builder.Database = Properties.Settings.Default.DBName
     return new MySqlConnection(builder.ToString());
}