我有一个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();
}
每次设置从模态窗体更改时,我都需要更新静态字符串。
答案 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());
}