我在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();
}
}
答案 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();
}
}