13

範囲に応じてかなり簡単で迅速な回答になると思いますが、事前にお詫び申し上げますが、どこを見ても答えが出ないことに驚いています。

およそ100個のクラス変数を持つSoldierというクラスを作成しました。ユーザーが情報を入力し、いくつかの異なるクラスのフォームの過程でSoliderオブジェクトを徐々に構築する必要があります(1つだけで収集するにはデータが多すぎるため)。

Form1.csでソルジャー(tempSoldier)の(空の)インスタンスを作成、ユーザーから収集したオブジェクトのクラス変数の設定を開始します。

private void button1_Click(object sender, EventArgs e)
{
    Soldier tempSoldier = new Soldier();
    tempSoldier.surname = textbox1.text;
}

私の質問:他のクラス(Form2.cs、Form3.cs ...)のForm1.csからオブジェクトインスタンス(tempSoldier)にアクセスするにはどうすればよいですか?

すべてのフォーム(Form1.cs、Form2.cs ...)が同じ名前空間を共有していることに注意してください。

前もって感謝します

編集:以下のすべてのソリューションが機能するので、どれが一番好きかによって異なります。ご意見ありがとうございます。ちょっとした注意点として、カスタムクラス(私の場合はSoldier.cs)を含むすべてのクラス修飾子をパブリックにするようにしてください。

4

4 に答える 4

12

Soldierより高いスコープでインスタンス を宣言する必要があります。

これを行う1つの方法は、Form1内で宣言してから、 Form2に渡すというようになります。

public class Form1
{
    private Soldier tempSoldier = new Soldier();

    private void button1_Click(object sender, EventArgs e)
    {
        tempSoldier = new Soldier();
        tempSoldier.surname = textbox1.text;
    }

    private void GotoNextStep()
    {
        // pass the existing instance to the next form
        Form2 form2 = new Form2(tempSoldier);

        // display form 2 ...
    }
}

もう1つの可能性は、すべてのフォームがアクセスできるクラスでシングルトン変数を使用することです。

public class MyAppManager
{
    private static readonly Soldier _soldier = new Solider();

    public static Soldier SoldierInstance
    {
        get { return _soldier; }
    }
}

private void button1_Click(object sender, EventArgs e)
{
    MyAppManager.SoldierInstnace.surname = textbox1.text;
}

フォームに明確なシーケンスがある場合は、前者のアプローチで問題ありません。異なる形式を異なる時間に使用したり、再検討したりできる場合は、後者の方が適しています。

于 2012-09-09T01:51:25.363 に答える
4

Soldierを静的変数にすることもできます:

public static Soldier soldier {get;set;}
private void button1_Click(object sender, EventArgs e)
{
    soldier = new Soldier();
    soldier.surname = textbox1.text;
}

他の形式のコード:

Form1.soldier.name ="";
于 2012-09-09T08:12:46.047 に答える
3

兵士を公開するパブリックプロパティをフォームに作成する必要があります。その後、他のフォームからこのプロパティにアクセスできます。

// ...

public Soldier Soldier { get; private set; }

private void button1_Click(object sender, EventArgs e)
{
  Soldier tempSoldier = new Soldier();
  tempSoldier.surname = textbox1.Text;

  this.Soldier = tempSoldier;
}

// ...

クラスForm2は次のようになります。

public partial class Form2
{
  private Form1 form1;

  public Form2(Form1 form1)
  {
    this.form1 = form1;

    this.InitializeComponent();
  }

  public void DoStuffWithForm1()
  {
    // ...

    string surname = this.form1.Soldier.surname;

    // ...
  }
}
于 2012-09-09T01:54:36.777 に答える
0

他のクラスでは、オブジェクトをパラメーターとして使用してメソッドを作成します。

public class TryMe (TextBox newTextbox) {
newTextbox.Text = "Hello this is a text."
//You can also get the value of textbox of another form
var textString = newTextbox.Text;
}

次に、メインフォームで、オブジェクトをパラメーターとして使用してそのメソッドを呼び出します。この場合、メソッドのパラメーターにtextbox1を追加します。

フォームのコード:

TryMe(textbox1);
于 2020-06-18T01:29:30.140 に答える