0

1つのフォームに5つのボタンがあり、クリックするとブール値がそれぞれtrueまたはfalseになり、新しいフォームも読み込まれます。そのフォームがロードされるとき、私はそれらのブールのどれが真か偽かを最初にチェックするために新しいフォームが必要です。これにより、フォームに正しいデータが読み込まれます。

私はこれがうまくいくと思ってboolsを公開し、form2_loadでどちらが正しいかを確認しました。ただし、これは機能していないようです。ラベルとテキストを変更するだけで最初に試しました。テキストは変更されておらず、boolsが読み取られたりチェックされたりしているとは思いません。

誰かが問題が何であるか知っていますか?

Form1コード:

public bool Room1;
public bool Room2;
public bool Room3;
public bool Room4;
public bool Room5;

private void btnRoom1_Click(object sender, EventArgs e)
    {
        this.Hide();

        //This displays Form2
        Form2 RoomTemplate = new Form2();
        RoomTemplate.Show();

        Room1 = true;
        Room2 = false;
        Room3 = false;
        Room4 = false;
        Room5 = false;

    }

Form2コード:

public Form3()
    {
        InitializeComponent();
        Form2 Rooms = new Form2();

        if (Rooms.Room1 == true)
        {
            lblTitle.Text = "Living Room";
        }

        if (Rooms.Room2 == true)
        {
            lblTitle.Text = "Dining Room";
        }
4

6 に答える 6

2

の新しいインスタンスを作成しないForm2でくださいForm3。参照を渡したり、シングルトンを実行したりしたくない場合はForm2、コンストラクターで静的プロパティに参照を割り当てるだけです。何かのようなもの:

public static Form2 Instance { get; set; }
public Form2() {
    Instance = this;
}

次に、でForm3ブール値にアクセスしますForm2.Instance.Room1

于 2012-06-29T15:45:31.217 に答える
2

Form2 Rooms = new Form2();

Form3のコンストラクターでは、Form2の新しいオブジェクトを作成しています。これは、Form2の新しいインスタンスである呼び出し元オブジェクトではないため、デフォルト値を持つすべてのboolプロパティがあります。Form2のコンストラクターでForm2オブジェクトを渡し、そこでパブリックプロパティにアクセスする必要があります。

Form2で

Form3 RoomTemplate = new Form3(this);
RoomTemplate.Show();

Form2で

Form3の構築者

public Form3(Form frm)
{
     MessageBox.Show(frm.Room1.ToString());    
}
于 2012-06-29T15:45:45.480 に答える
1

では、別の場所で変更Form3しているインスタンスが必要Form2です。以前に設定した内容を認識していない新しいインスタンスをインスタンス化するため、これらのブール値のデフォルトとして設定されたForm3もののみを使用します。Form2Form2

于 2012-06-29T15:46:03.400 に答える
0

btnRoom1_Clickイベントに値を設定しているように見えますがRoom、forがインスタンス化された直後に値を参照しています。つまり、btnRoom1_Clickメソッドが呼び出される前です。

于 2012-06-29T15:45:52.723 に答える
0

Form3内のForm2は、ボタンが押されたフォームと同じオブジェクトではありません。Form2オブジェクトをForm3に渡すか(form2がForm3を開くと仮定)、Form2内で何かが発生したときにForm3オブジェクトに通知するか、シングルトンFomr2または静的フィールドを使用できます。

于 2012-06-29T15:46:15.473 に答える
0

これはそれを行う1つの方法です:

public bool Room1;
public bool Room2;
public bool Room3;
public bool Room4;
public bool Room5;
private void btnRoom1_Click(object sender, EventArgs e)
{
    this.Hide();

    Room1 = true;
    Room2 = false;
    Room3 = false;
    Room4 = false;
    Room5 = false;

    //This displays Form2
    Form2 RoomTemplate = new Form2(this);
    RoomTemplate.Show();
}

public class Form2()
{
    public Form2(Form1 form1)
    {
        InitializeComponent();
        if(form1.Room1 == true)
        {
            lblTitle.Text="Living Room";
        }
        else if(form1.Room2==true)
        {
            //
        }
        //
    }
}
于 2012-06-29T15:53:58.510 に答える