为什么以下代码会生成Object Disposed Exception

时间:2016-04-13 21:27:28

标签: c# winforms

我在视觉工作室玩游戏并更好地了解C#。我来自Java的中级背景知识。

我制作了一个非常简单的Windows窗体应用程序。用户点击一个按钮,按钮将它们带到另一个屏幕,用户键入一个文本框并按下一个按钮,在该按钮中,该按钮将显示用户键入的内容;在形式。这是代码:

Form1.cs中:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form


    {
        Form2 userinputForm;
        public Form2 getSetForm2 {
            get { return userinputForm; }
            set { userinputForm = value; }
        }

        Form1 homeFormObj;
        public Form1 getSetForm1 {
            get { return homeFormObj; }
            set { homeFormObj = value; }
        }



        public Form1()
        {
            InitializeComponent();
            getSetForm2 = new Form2();
            getSetForm1 = this;
            getSetForm2.formOnePublicObj = getSetForm1;
        }

        internal void displayUserInput(string name)
        {
            Label l = new Label();
            l.Text = name;

            panel1.Controls.Add(l);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            userinputForm.Show();
        }
    }
}

Form2.cs:

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form2 : Form
    {
        Form1 formOneObj;
        public Form1 formOnePublicObj {
            get { return formOneObj; }
            set { formOneObj = value; }
        }

        public Form2()
        {
            InitializeComponent();
        }

        List<string> userinputs = new List<string>();

        private void button1_Click(object sender, EventArgs e)
        {
            string name = textBox1.Text;
            formOnePublicObj.displayUserInput(name);

        }
    }
}

第二次用户按下按钮转到form2时会发生错误。它出现在.show()方法上。

(P.S我这样编码,看看我如何将数据从一个窗口表单传递到另一个窗体,因此表单对象上的getter和setter)。

1 个答案:

答案 0 :(得分:0)

好吧,userinputform永远不会设置,null也是如此。因此,我不明白为什么它第一次有效,除非你的代码实际上没有粘贴。

这可能是因为您正在关闭第二种形式,这会破坏它,因此您无法再次显示它。每次单击form1中的按钮时,都会创建一个新的form2:

        getSetForm2 = new Form2();
        getSetForm1 = this;
        getSetForm2.formOnePublicObj = getSetForm1;