0

我有一个带有一个主窗口的简单 .net 应用程序。那里有一些单选按钮,我想在处理数据之前检查它们。我有两组 CS 文件。Form1.cs(主窗口代码)和 database.CS(实际运行 DB 查询的代码。) 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);
    }

它正确更新。

4

2 回答 2

5

Form每次调用GetConnectionString方法时都在创建新方法,它不会由您选择,而是采用默认值 ( Dev)。

这个问题有几个解决方案,您可以将您的选择作为参数传递:

GetConnectionString(string world) {}
// or
GetConnectionString(MyEnum world) {}

然后在你的Form

string str = GetConnectionString(this.GetWorld);
于 2013-03-15T17:09:17.217 回答
3

在这一行:

MainWindow = new Form1();

您正在创建一个全新的Form1. 这不是对您在程序中显示的窗口的引用,它的单选按钮将位于初始位置,因此它总是返回相同的值。

您有几个选择:

  • 将对您的主窗口的引用传递给该GetConnectionString()方法。
  • MainWindow.GetWorld将值传递给GetConnectionString()方法(首选)。
于 2013-03-15T17:09:53.647 回答