【问题标题】:reading bools from one form to another c#将布尔值从一种形式读取到另一种 c#
【发布时间】:2012-06-29 15:41:24
【问题描述】:

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

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

有谁知道问题出在哪里?

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";
        }

【问题讨论】:

  • 哇——首先你没有遗漏一些代码吗?您说的是 Form2 代码:但是您显示了初始化 form2 的 Form3 的构造函数...从我所看到的情况来看,它看起来不错,但发布了缺少的代码

标签: c# winforms visual-studio


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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());    
    }
    

    【讨论】:

      【解决方案3】:

      Form3 中,您需要在其他地方修改Form2 的实例。您的 Form3 只会使用 Form2 设置为这些布尔值的默认值,因为您正在实例化一个新的 Form2,它不知道您之前设置的内容。

      【讨论】:

        【解决方案4】:

        这是一种方法:

        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)
                {
                    //
                }
                //
            }
        }
        

        【讨论】:

          【解决方案5】:

          看起来您正在设置 btnRoom1_Click 事件的值,但您在实例化 for 之后直接引用了 Room 值。 IE。在调用 btnRoom1_Click 方法之前。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 2015-06-06
              • 2015-06-23
              • 2012-03-11
              • 1970-01-01
              • 2010-10-06
              相关资源
              最近更新 更多