Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> из Form2 в Form1 
:(
    Опции темы
PaZ1T1V
Дата 29.2.2008, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



Здравствуйте, это опять я. У меня такая зада4а стоит есть два класса форм: Form1 и Form2 соответственно (классы независимы)
public partial class Form1 : Form
public partial class Form2 : Form
на форм1 есть кнопка, по нажатию на которую вылазит форм2(реалезовано)
на форм2 есть textBox, в который  загоняется слово(реализовано) и ето слово добавляется на форм1 (ну еесесна после нажатия кнопки на форм2) в Листбокс(как ето сделать) помогите плз smile 
ЗЫ заранее спасибо)  

Код

 public partial class Form1 : Form
................
private void button5_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Show();
        }
..........

и
Код

public partial class Form2 : Form
    {
        Form1 form1;

        public Form2()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }
                
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string temp;
            if(textBox1.Text == null)
                MessageBox.Show("Введите текст для добавления в строку ");
            if(textBox1.Text != null)
                temp = this.textBox1.Text.ToString();
            if (radioButton1.Checked == true)
            {
                //this.form1.ListBox1.Items.Add(temp);
            }
                
        }
    }


Это сообщение отредактировал(а) PaZ1T1V - 29.2.2008, 15:58
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sherlock
Дата 29.2.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



А после какого события в form2 эта строка попадает в листбокс form1? После того как какую-нибудь кнопку нажал типа "я всё ввёл"? Или после того как закончил вводить в текстбокс?
PM MAIL   Вверх
Sherlock
Дата 29.2.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Всё я понял. Короче так:
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.<Имя открытого свойства>) // если завёл свойство
}

PM MAIL   Вверх
vponomarov
Дата 29.2.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 4
Всего: 12



ну если судить по уже написаному коду, то нужно сделать так:
1. или объявить form1.ListBox1 как public
2. или добавить в form1 public метод
Код

public void AddWord(string w)
{
     ListBox1.Items.Add(w);
}

и обработчик клика на кнопку будет иметь вид
Код

 private void button1_Click(object sender, EventArgs e)
        {
            string temp;
            if(textBox1.Text == null)
                MessageBox.Show("Введите текст для добавления в строку ");
            if(textBox1.Text != null)
                temp = this.textBox1.Text.ToString();
            if (radioButton1.Checked == true)
            {
                this.form1.AddWord(temp);
            }
                
        }


хотя лично я обычно делаю как описал Sherlock.


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
tol05
Дата 29.2.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



С моей точки зрения нужно реализовывать взаимодействие форм через события. Это наиболее универсальный способ. 

Форма1 заинтересована в каком-то событии, происходящем с Формой2. Форма2 объявляет это событие (с именем "НужноеТебеСловоНаконецтоВведеноВМойТексБокс" например), а Форма1 подписывается на это событие своим методом-обработчиком.
Дополнительная информация, необходимая Форме1 от Формы2 (при наступлении этого события) передается как аргументы EventHandler-a

Т.о. сохраняется полная инкапсуляция данных и минимизируются связи между объектами.

Вот наглядный пример
Код

public partial class Form1 : Form
    {
        public event EventHandler MyKeyDown;
        
        public Form1()
        {
            InitializeComponent();
            Form2 form2 = new Form2();
            MyKeyDown += form2.Receive;
            form2.Show();
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if(MyKeyDown != null)
            {
                MyKeyDown(this, e);
            }
        }
    }

Код

public partial class Form2 : Form
    {
        public void Receive(object sender, EventArgs e)
        {
            KeyEventArgs ke = e as KeyEventArgs;
            Text += ke.KeyCode.ToString();
        }
    }

Хотя здесь можно и не делать своего события, а просто textBox1.KeyDown += form2.Receive;
но это в примере, а вообще... при наступлении нестандартных событий нужно и взаимодействовать через события

Это сообщение отредактировал(а) tol05 - 29.2.2008, 13:25


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
PaZ1T1V
Дата 29.2.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



Не работает ( 

Это сообщение отредактировал(а) PaZ1T1V - 29.2.2008, 15:16
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
PaZ1T1V
Дата 29.2.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



Цитата(vponomarov @ 29.2.2008,  12:47)
ну если судить по уже написаному коду, то нужно сделать так:
1. или объявить form1.ListBox1 как public
2. или добавить в form1 public метод
Код

public void AddWord(string w)
{
     ListBox1.Items.Add(w);
}

и обработчик клика на кнопку будет иметь вид
Код

 private void button1_Click(object sender, EventArgs e)
        {
            string temp;
            if(textBox1.Text == null)
                MessageBox.Show("Введите текст для добавления в строку ");
            if(textBox1.Text != null)
                temp = this.textBox1.Text.ToString();
            if (radioButton1.Checked == true)
            {
                this.form1.AddWord(temp);
            }
                
        }


хотя лично я обычно делаю как описал Sherlock.

а не факт 4то вот ето работать будет(немного разобрался) 
 создается во второй форме глобальный объект типа форм1 но ето создается не ссылка на существующую форму а новая форма типа форм1 выходит ето все отпадает 


ЗЫ вопрос не закрыт 
     помогите ламеру плз как сделать ) 
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Cold_Almaty
Дата 3.3.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 22.1.2008

Репутация: нет
Всего: нет



Цитата

1. или объявить form1.ListBox1 как public


Это нарушение инкапсуляции. Не надо так делать.

Я решил аналогичную задачу, сделав FORM2 диалоговым окном. И добавил на ней свойства, которые и добавляют содержимое текстбокса из формы2 в форму1. 
Посмотри здесь. Последний пример вполне рабочий.
PM MAIL   Вверх
vponomarov
Дата 3.3.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 4
Всего: 12



Цитата

Это нарушение инкапсуляции. Не надо так делать

согласен, но приемлемое решение уже было предложено Sherlock и оно почему-то не помогло автору.
вот я и предложил альтернативы.

Цитата

а не факт 4то вот ето работать будет(немного разобрался) 
 создается во второй форме глобальный объект типа форм1 но ето создается не ссылка на существующую форму а новая форма типа форм1 выходит ето все отпадает 


все правильно, просто вы в своем коде в первом посте так написали 
Цитата

this.form1.ListBox1.Items.Add(temp);

вот я и не стал разбираться как там у вас все организовано smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0786 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.