如何在C#中从另一个表单调用var

时间:2010-12-20 07:22:46

标签: c# forms global-variables

我在C#中有两个表格...我在表格1 pic,pic2和picC中声明3 var。

在zoomform中我实例化form1对象以尝试获取变量值..但是我遇到了stackoverflow异常......

 namespace Disimage
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    zoomForm zf = new zoomForm();

     public Bitmap pic;
            public Bitmap pic2;
            public Bitmap picC;
    }
    }


    namespace Disimage
    {
        public partial class zoomform : Form
        {
            public zoomform()
            {
                InitializeComponent();
            }
    Form1 f1 = new Form();

    }
    }

5 个答案:

答案 0 :(得分:1)

因为你创建了一个Form1实例,其中包含一个zoomForm实例,它包含一个Form1实例,其中包含一个zoomForm实例,它包含一个Form1实例,其中包含一个包含一个Form1实例的zoomForm实例。 zoomForm的一个实例,它包含一个Form1实例,其中包含一个zoomForm实例,然后就是你的堆栈。

答案 1 :(得分:1)

这是因为当你打电话时

zoomForm zf = new zoomForm();它将创建一个Form1对象,再次创建一个循环的ZoomForm对象结果,最终导致stackoverflow

它与流动的suisidal代码相似

Class A
{
        A a ;

   A()
   {
        a = new A();
    }
}

答案 2 :(得分:0)

在zoomForm中你实例化一个Form1,在Form1中你实现了一个zoomForm,所以你的callstack看起来像这样(假设你先创建一个zoomForm):

...
Form1的
zoomForm
Form1的
zoomForm
Form1的
zoomForm
Form1的
zoomForm
Form1的
zoomForm
Form1的
zoomForm
Form1的
zoomForm
Form1的
zoomForm
......

大约8000行或其他方式太高的数字。解决此问题的一种简单方法是不对类中的对象进行实例化,而是从外部设置对象。

zoomForm zf = new zoomForm();
form f1 = new Form1();
zf.form1 = f1;
f1.zoomForm = zf;

答案 3 :(得分:0)

将您的代码更改为

namespace Disimage
{
    public partial class Form1 : Form
    {
        zoomForm zf;       
        public Bitmap pic;
        public Bitmap pic2;
        public Bitmap picC;
        public Form1()
        {
            InitializeComponent();
            zf = new zoomForm();
            zf.Parent = this;
        }       
    }
}


namespace Disimage
{
    public partial class zoomform : Form
    {
        Form1 Parent;
        public zoomform()
        {
            InitializeComponent();
        }   
    }
}

如果您希望引用“父/呼叫”表单,则需要明确设置此类引用。

答案 4 :(得分:0)

试试这个。这里我通过将另一种形式的相同值类型声明为公共属性来将3 var传递给另一种形式

    namespace Disimage {
    public partial class Form1 : Form
    { 
        public Form1()
    { 
            InitializeComponent();

    } 
        private Bitmap pic;
        private Bitmap pic2;
        private Bitmap picC; 
        zoomForm zf = new zoomForm();
        zf.pic = pic;
        zf.pic2 = pic2;
        zf.picC = picC;
        zf.ShowDialog();

    }
}
namespace Disimage
{
    public partial class zoomform : Form 
    {
        public Bitmap pic;
        public Bitmap pic2;
        public Bitmap picC; 
        public zoomform() 
        { 
            InitializeComponent(); 
        } 
        Form1 f1 = new Form(); 
    } 
}