繁体   English   中英

为什么我的公共变量返回旧数据?

[英]why is my public variable returning old data?

我有一个带有一个主窗口的简单.net应用程序。 在处理数据之前,我要检查一些单选按钮。 我有两组CS文件。 Form1.cs(主窗口代码)和数据库。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;
        }   
    }

我的问题是,无论我检查了哪个单选按钮,它始终会选择顶级开发选项。

我可以采取一些解决方法(使单选按钮作为对数据库CS的调用的一部分被传递),但我不明白为什么这种方法无法正常工作。 在我看来,方法GetConnectionString()基本上是在应用启动时拉动表单数据,而从未真正查找过。

如果在Form1中运行以下代码:

    private void button1_Click(object sender, EventArgs e)
    {
        string blah = GetWorld;
        MessageBox.Show(blah);
    }

它正确更新。

每次调用GetConnectionString方法时,您都将创建一个新的Form ,它不需要您选择,而是使用默认值( Dev )。

有两种解决方案,您可以将选择作为参数传递:

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

然后以您的Form

string str = GetConnectionString(this.GetWorld);

在这一行:

MainWindow = new Form1();

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

您有以下几种选择:

  • 将对主窗口的引用传递到GetConnectionString()方法中。
  • MainWindow.GetWorld值传递到GetConnectionString()方法中(首选)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM