Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > из Form2 в Form1 |
Автор: PaZ1T1V 29.2.2008, 11:28 | ||||
Здравствуйте, это опять я. У меня такая зада4а стоит есть два класса форм: Form1 и Form2 соответственно (классы независимы) public partial class Form1 : Form public partial class Form2 : Form на форм1 есть кнопка, по нажатию на которую вылазит форм2(реалезовано) на форм2 есть textBox, в который загоняется слово(реализовано) и ето слово добавляется на форм1 (ну еесесна после нажатия кнопки на форм2) в Листбокс(как ето сделать) помогите плз ![]() ЗЫ заранее спасибо)
и
|
Автор: Sherlock 29.2.2008, 11:58 |
А после какого события в form2 эта строка попадает в листбокс form1? После того как какую-нибудь кнопку нажал типа "я всё ввёл"? Или после того как закончил вводить в текстбокс? |
Автор: Sherlock 29.2.2008, 12:16 |
Всё я понял. Короче так: 1) Либо делаешь текстбокс во второй форме public, либо заводишь открытое свойство в form2, в которое по нажатию кнопки заносится значение текстбокса. 2) Пишешь такую строчку в form2.Designer.cs для кнопки button1 this.button1.DialogResult = System.Windows.Forms.DialogResult.OK; 3) В обработчике нажатия на кнопку в form1 после frm2.Show() пишешь if (frm2.DialogResult == DialogResult.OK) { ..... Listbox1.Items.Add(frm2.textbox1.Text) // если public textbox Listbox1.Items.Add(frm2.<Имя открытого свойства>) // если завёл свойство } |
Автор: vponomarov 29.2.2008, 12:47 | ||||
ну если судить по уже написаному коду, то нужно сделать так: 1. или объявить form1.ListBox1 как public 2. или добавить в form1 public метод
и обработчик клика на кнопку будет иметь вид
хотя лично я обычно делаю как описал Sherlock. |
Автор: tol05 29.2.2008, 12:55 | ||||
С моей точки зрения нужно реализовывать взаимодействие форм через события. Это наиболее универсальный способ. Форма1 заинтересована в каком-то событии, происходящем с Формой2. Форма2 объявляет это событие (с именем "НужноеТебеСловоНаконецтоВведеноВМойТексБокс" например), а Форма1 подписывается на это событие своим методом-обработчиком. Дополнительная информация, необходимая Форме1 от Формы2 (при наступлении этого события) передается как аргументы EventHandler-a Т.о. сохраняется полная инкапсуляция данных и минимизируются связи между объектами. Вот наглядный пример
Хотя здесь можно и не делать своего события, а просто textBox1.KeyDown += form2.Receive; но это в примере, а вообще... при наступлении нестандартных событий нужно и взаимодействовать через события |
Автор: PaZ1T1V 29.2.2008, 13:48 |
Не работает ( |
Автор: PaZ1T1V 29.2.2008, 15:32 | ||||||
а не факт 4то вот ето работать будет(немного разобрался) создается во второй форме глобальный объект типа форм1 но ето создается не ссылка на существующую форму а новая форма типа форм1 выходит ето все отпадает ЗЫ вопрос не закрыт помогите ламеру плз как сделать ) |
Автор: Cold_Almaty 3.3.2008, 11:16 | ||
Это нарушение инкапсуляции. Не надо так делать. Я решил аналогичную задачу, сделав FORM2 диалоговым окном. И добавил на ней свойства, которые и добавляют содержимое текстбокса из формы2 в форму1. Посмотри http://forum.vingrad.ru/forum/topic-198022.html. Последний пример вполне рабочий. |
Автор: vponomarov 3.3.2008, 11:29 | ||||||
согласен, но приемлемое решение уже было предложено Sherlock и оно почему-то не помогло автору. вот я и предложил альтернативы.
все правильно, просто вы в своем коде в первом посте так написали
вот я и не стал разбираться как там у вас все организовано ![]() |