0

我在一个表单上有五个按钮,单击这些按钮可以使布尔值分别为真或假,它们还会加载一个新表单。加载该表单后,我需要新表单首先检查这些布尔值中的哪一个是真还是假。这将导致表单加载正确的数据。

我将布尔值设置为公众认为这会起作用,并在 form2_load 中检查了哪一个是正确的。但这似乎不起作用。我首先尝试更改标签和文本。文本没有改变,我认为布尔值没有被读取或检查。

有谁知道是什么问题?

表格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();

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

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

    }

表格2代码:

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

不要创建Form2in的新实例Form3。如果您不想传递引用或做单例,那么只需将Form2其构造函数中的引用分配给静态属性。就像是:

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

然后使用 .Form3访问布尔值Form2.Instance.Room1

于 2012-06-29T15:45:31.217 回答
2

Form2 房间 = 新 Form2();

在 Form3 的构造函数中,您正在创建 Form2 的新对象,它将具有所有具有默认值的 bool 属性,因为这不是调用对象,而是 Form2 的新实例。您应该在 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的实例。Form2Form3只会使用Form2设置为这些布尔值的默认值,因为您正在实例化一个新的Form2,它不知道您之前设置的内容。

于 2012-06-29T15:46:03.400 回答
0

看起来您正在为btnRoom1_Click事件设置值,但在实例化 for 之后直接引用这些Room值。即在该btnRoom1_Click方法被调用之前。

于 2012-06-29T15:45:52.723 回答
0

Form3 中的 Form2 与按下按钮的表单不是同一个对象。您可以将 Form2 对象传递给 Form3(假设 form2 打开 Form3)或在 Form2 内部发生某些事情时通知 Form3 对象或使用单例 Formr2 或静态字段

于 2012-06-29T15:46:15.473 回答
0

这是一种方法:

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 回答