Как вызвать var из другой формы в C # - PullRequest
0 голосов
/ 20 декабря 2010

у меня есть две формы в C # ... я объявляю 3 var в форме 1 pic, pic2 и picC.

В 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 ]

1 голос
/ 20 декабря 2010

это потому, что при вызове

zoomForm zf = new zoomForm ();он создаст объект Form1, который снова создаст объект ZoomForm, что приведет к циклу и, в конечном итоге, к стеку

, что похоже на колеблющийся суицидальный код

Class A
{
        A a ;

   A()
   {
        a = new A();
    }
}
1 голос
/ 20 декабря 2010

Это потому, что вы создаете экземпляр Form1, который содержит экземпляр zoomForm, который содержит экземпляр Form1, который содержит экземпляр zoomForm, который содержит экземпляр Form1, который содержит экземпляр zoomForm, который содержит экземпляр Form1, который содержит экземпляр zoomForm, который содержит экземпляр Form1, который содержит экземпляр zoomForm и отправляет ваш стек.

0 голосов
/ 20 декабря 2010

Попробуйте это. Здесь я передаю 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(); 
    } 
} 
0 голосов
/ 20 декабря 2010

Измените свой код на что-то вроде

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();
        }   
    }
}

Если вы хотите иметь ссылку на форму Parent / Calling, вам необходимо явно указать такую ​​ссылку.

0 голосов
/ 20 декабря 2010

В zoomForm вы создаете экземпляр Form1, а в Form1 - zoomForm, поэтому ваш стек вызовов выглядит следующим образом (при условии, что вы сначала создали zoomForm):

...
Form1
zoomForm
Form1
zoomForm
Form1
zoomForm
Form1
zoomForm
Form1
zoomForm
Form1
zoomForm
Form1
zoomForm
Form1
zoomForm
...

для примерно 8 тысяч строк или другого слишком большого числа. Один из простых способов решить эту проблему - не создавать объекты в классах, а устанавливать объекты извне.

zoomForm zf = new zoomForm();
form f1 = new Form1();
zf.form1 = f1;
f1.zoomForm = zf;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...