у меня есть 2 формы — Form1, Form2 (Form1-parent, Form2-child)
Form2 вызывается из Form1:
Form2 form2=new Form2();
form2.MdiParent = this;
form2.Show ();
parent form содержит textBox1 и переменную для получения/изменения его значения:
private string var1{
get{return tetBox1.Text;}
set {textBox1.Text=value;}
}
по идее я его могу изменить в Form2 так:
form1.var1="Hello";
В Form2 я прописал Form1:
public Form1 form1;
Но создавать его видимо не надо? (form1 — parent ведь уже создан)
выдается ошибка: object reference not set to an instance of an object
а если выполнить перед установкой параметра: form1=new Form1(), то ошибки не будет но
ничего и не измениться.
Вобщем тут проблема видимости ..
Что нужно изменить?
Здравствуйте, Аноним, Вы писали:
А>а если выполнить перед установкой параметра: form1=new Form1(), то ошибки не будет но
правильно будет form1= this.ParentForm
обмен параметров между формами
От:
Аноним
Дата:
03.11.04 07:26
Оценка:
В Form1.cs:
Form2 form2=new Form2();
form2.MdiParent = this;
form2.Show ();
... public string var1{
get{return tetBox1.Text;}
set {textBox1.Text=value;}
}
Niswn,
попробовал сделать так:
//form1, form2- это childs
form1.cs:
public string val1{
get{return str;}
}
string str="Hello";
в form2.cs:
form1=(Form1)this.MdiParent;
string tmp1=form1.val1;
MessageBox.Show(tmp1);
выводит:
specified cast is not valid, на строке form1=(Form1)this.MdiParent;
Я еще пробовал так:
foreach (Form frm in this.MdiParent.MdiChildren)
if (frm is Form1)
{
con=((Form1) frm).con1;//пытаюсь получить конекшн из другой формы
str=((Form1) frm).str; // пытаюсь получить строку
}
в данном случае выдается оибка что con1, str не assigned
------------------
что касается приведенной ссылки Торса — то она полностью пишет то о чем я уже написал
и она не отвечает на вопрос как между 2мя child обмениваться данными
>что касается приведенной ссылки Торса
Будьте внимательней — Тореро
>она полностью пишет то о чем я уже написал и она не отвечает на вопрос как между 2мя child обмениваться данными
Вовсе нет... В данном FAQ нет абсолютно ничего из того, о чем Вы писали. И про 2ух child'ов речи не шло.
Теперь по сути... Все что Вам на самоv деле нужно — получить ссылку на нужное окно... >//form1, form2- это childs
form1.cs:
public string val1{
get{return str;}
}
string str="Hello"; в form2.cs:
form1=(Form1)this.MdiParent;
string tmp1=form1.val1;
MessageBox.Show(tmp1); выводит:
specified cast is not valid, на строке form1=(Form1)this.MdiParent;
Конечно, теперь же они оба child'ы...
>Я еще пробовал так:
foreach (Form frm in this.MdiParent.MdiChildren)
if (frm is Form1)
{
con=((Form1) frm).con1;//пытаюсь получить конекшн из другой формы
str=((Form1) frm).str; // пытаюсь получить строку
} Покажите как Вы объявляете con1 и str.
>Будьте внимательней — Тореро
Извините, описАлся.
string str="Hello";
в form2.cs:
form1=(Form1)this.MdiParent;
string tmp1=form1.val1;
MessageBox.Show(tmp1);
выводит:
specified cast is not valid, на строке form1=(Form1)this.MdiParent;
Конечно, теперь же они оба child'ы...
запутался я уже. наверное изначально не совсем правильно объяснил, что и где.
есть 3 формы: form1 (это перент). form2, form3 — childs
form1 создала 2 кида успешно.
form2 содержит:
---------------
public string val1{
get{return str_con;}
}
str_con="....";
con1=....;//connection работает. Он на этой форме и конектится
теперь, form3 должна получить con1 из форм2, а также строку str_con
form3 содержит:
----------------
foreach (Form frm in this.MdiParent.MdiChildren)
if (frm is Form2)
{
con=((Form2) frm).con1;
str=((Form2) frm).str_con;
}
как же он может быть неинициализированным?
форма2 содержит textBox, у которого задается строка, которая сразу же используется для соединения с БД.
если бы она была неинициализированна,то соединения бы не было.
Что касается передачи параметров, то в форм 3 я могу получить connection из form2, но скажем строку str которая мне нужна или значение из textBox1.Text не могу получить. Пишет: use of unassigned local variable.
может быть влияет то, что я форму 2 прячу методом hide? но с другой стороны если бы это влияло, то почему коннекшн удалось получить а строковую переменную или значение контрола нет?
>как же он может быть неинициализированным?
форма2 содержит textBox, у которого задается строка, которая сразу же используется для соединения с БД.
если бы она была неинициализированна,то соединения бы не было.
Что касается передачи параметров, то в форм 3 я могу получить connection из form2, но скажем строку str которая мне нужна или значение из textBox1.Text не могу получить. Пишет: use of unassigned local variable.
И все-таки попробуйте в дебеггере встать на это место и посмотреть, что произойдет. Что у Вас такое str_con? Свойство или просто поле в форме? И какое отношение оно имеет к textBox.
кстати, посмотрел в дебагере — значения в форме2 в поле val1 , textBox1.Text есть. а вот в форме3 , в str (туда куда пытаюсь присвоить значение из формы2) пишет null.
присваиваю так: str=((Form2) frm).val1;
не так написал немного...
дебагер показывает , что в str кладет значение то которое нужно , но как только я его пытаюсь использовать:
например вывесте через MessageBox, или использовать эту строкувую переменную в строковых манипуляциях, то выдает, что
use of unassigned local variable str
Здравствуйте, Niswn, Вы писали:
N> В Form1.cs:
N>Form2 form2=new Form2(); N>form2.MdiParent = this; N>form2.Show (); N>... N>public string var1{ N> get{return tetBox1.Text;} N> set {textBox1.Text=value;} N>}
N>В Form2.cs:
N>public Form1 form1; //public здесь не обязателен
N>//А в каком-нибудь методе (например в Load):
N>form1=(Form1)this.MdiParent; N>form1.var1="Hello";
N>данное сообщение получено с www.gotdotnet.ru N>ссылка на оригинальное сообщение