0

メインウィンドウが1つあるシンプルな.netアプリがあります。データを処理する前に確認したいラジオボタンがいくつかあります。2セットの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 に答える