Form2のクラスからプロパティの値を取得し、その値はC#のForm1に設定されています

c# winforms
Form2のクラスからプロパティの値を取得し、その値はC#のForm1に設定されています

これがシナリオです。 Class1にServerの値を設定したいのですが、Form1に値を設定しています。 次に、Form2のClass1のサーバーの値を取得します。 ここに私が持っているものがあります。

class Class1
{
    private string server;

    public string Server
    {
        get { return server; }
        set { server = value; }
    }
}

//Form1 where i want to set the value of server
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1 sample = new Class1();
    sample.Server = serverTxt.Text;
}

//Form2 where i want to get the value of server that i've set in Form1
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1 sample = new Class1();
    string serVer = sample.Server;
}

Class1の新しいインスタンスを宣言したため、serverの値を取得できないことがわかっています。 しかし、Form1で設定したForm2のサーバーの値を取得できる方法はありますか?

私をspareしまないでください、私はC#の初心者です。

  1  0


ベストアンサー

選択肢は多数ありますが、Class1の静的インスタンスの方が簡単です。

form1で、Class1クラスの静的インスタンスを宣言/作成します

//Form1 where i want to set the value of server
public static Class1 sample=new Class1();
private void setBtn_Click_1(object sender, EventArgs e)
{
    sample.Server = serverTxt.Text;
}

そしてForm2では

//Form2 where i want to get the value of server that i've set in Form1
private void setBtn_Click_1(object sender, EventArgs e)
{
    string serVer = Form1.sample.Server;
}

2


それができないだけでなく、setBtn_Click_1の実行後のコードでは、作成したタイプClass1のオブジェクトはなくなります。これは、メソッドで参照しているため、メソッドが参照を実行するためです。なくなっている!

1


2番目のフォームを作成するときに、コンストラクターで送信できます。 このようなもの

class Class1
{
    private string server;

    public string Server
    {
        get { return server; }
        set { server = value; }
    }
}

//form 1
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1 sample = new Class1();
    sample.Server = serverTxt.Text;
    prevForm = sample;
}



//form 2
private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1 sample = new Class1{ Server=prevForm.Server };
}

そのためには、結果または最初のフォームへの参照をどこかに保存して、後でアクセスできるようにする必要があります

1


これに対する1つの解決策は、Calss1のサーバープロパティを静的として宣言することです。

class Class1
{
    public static string Server { get; set; }
}

そのため、2つのフォーム間で値を取得できます

private void setBtn_Click_1(object sender, EventArgs e)
{
    Class1.Server = serverTxt.Text;
}

private void setBtn_Click_1(object sender, EventArgs e)
{
    string serVer = Class1.Server;
}

Class1のすべてのインスタンスに対して1つのサーバーがある場合にのみ、これを使用します

1


Form1のserverTxt.Textの値をグローバル変数に設定する必要があります(最も簡単な方法)。 次に、Form2でこのグローバル変数の値を取得します

1


Form2コンストラクターで関連データを送信し、Form1から初期化できます(Form1でForm2を初期化するときにデータを渡します)

[EDIT] You could also pass the information via a database that keeps
そのデータ、または両方のフォームがアクセスできる外部ファイルを使用します。

1


タイトルとURLをコピーしました