我有一个简单的.net应用程序,有一个主窗口。在处理数据之前,我想检查一些单选按钮。我有两套CS文件。 Form1.cs(主窗口代码)和database.CS(实际运行数据库查询的代码。)database.cs需要能够从Form1.cs中读取一些设置。
在form1.cs上我有这个:
public string GetWorld
{
get
{
if (this.radioButton_Dev.Checked == true)
{
MessageBox.Show("Returning Dev!");
return "Dev";
}
else if (this.radioButton_Prod.Checked == true)
{
MessageBox.Show("Returning Prod!");
return "Prod";
}
else
{
MessageBox.Show("Returning default!");
return "Dev";
}
}
}
在database.cs中我有这个:
public SqlConnection GetConnectionString () {
Form1 MainWindow;
MainWindow = new Form1();
if (MainWindow.GetWorld == "Dev" )
{
SqlConnection Connection = new SqlConnection("Data Source = Dev .... blah blah blah...");
return Connection;
}
else if (MainWindow.GetWorld == "Prod")
{
SqlConnection Connection = new SqlConnection("Data Source = Prod .... blah blah blah...");
return Connection;
}
else
{
SqlConnection Connection = new SqlConnection("Data Source = Dev .... blah blah blah...");
return Connection;
}
}
我遇到的问题是无论我检查了什么单选按钮,它总是选择顶部开发选项。
我可以使用一些变通方法(使单选按钮作为调用database.CS的一部分传递)但我不明白为什么这不能正常工作。对我来说,似乎方法GetConnectionString()基本上是在应用程序启动时拉取表单数据,而不是实际查找它。
如果在Form1中运行这段代码:
private void button1_Click(object sender, EventArgs e)
{
string blah = GetWorld;
MessageBox.Show(blah);
}
它正确更新。
答案 0 :(得分:5)
每次调用Form
方法时,您都会创建新的GetConnectionString
,它不会选择,而是采用默认值(Dev
)。
此问题有几种解决方案,您可以将您的选择作为参数传递:
GetConnectionString(string world) {}
// or
GetConnectionString(MyEnum world) {}
然后在Form
:
string str = GetConnectionString(this.GetWorld);
答案 1 :(得分:3)
在这一行:
MainWindow = new Form1();
您正在创建一个全新的Form1
。这不是对您在程序中显示的窗口的引用,它的单选按钮将处于初始位置,因此它总是返回相同的值。
您有几个选择:
GetConnectionString()
方法。MainWindow.GetWorld
值传递给GetConnectionString()
方法(最好)。