[C#] Обмен данными между формами.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by NetSter, 22 Apr 2010.

  1. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Всем привет.
    Шарп изучаю недавно так что выручайте)
    Есть ситуация.
    В форме 1 посредством разных действий получили информацию, вывели в разные текстбоксы (штук 5, это не особо важно).
    Теперь по клику кнопки нужно собрать все данные с текстбоксов, форму 1 спрятать, запустить форму 2, в которой уже есть RichTextBox, в который нужно все данные записать (не по нажатию батона на форм2 а сразу при загрузке формы2).
    для примера 2 чистых формы с текстбооксом и батоном.
    Код формы1

    PHP:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace 
    WindowsFormsApplication1
    {
        public 
    partial class Form1 Form
        
    {
            public 
    Form1()
            {
                
    InitializeComponent();
            }

            private 
    void button1_Click(object senderEventArgs e)
            {
                
    Form Form1 = new Form1();
                
    Form Form2 = new Form2();
                
    this.Hide();
                
    Form2.Show();
            }
        }
    }

    и вторая форма

    PHP:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace 
    WindowsFormsApplication1
    {
        public 
    partial class Form2 Form
        
    {
            public 
    Form2()
            {
                
    InitializeComponent();
            }

            private 
    void button1_Click(object senderEventArgs e)
            {
                
    Form Form1 = new Form1();
                
    Form Form2 = new Form2();
                
    Form1.Show();
                
    this.Close();
            }
        }
    }
    теперь самое вкусненькое)
    так как все таки заставить форму2 при загрузке (самой формы) заполнить ричтекстбокс формы2 тесктом который находится в текстбоксе формы1.
    тестовый примитивный пример проекта лежит по ссылке http://dump.ru/file/4539450
    Помогите, без Вас никак)
    Спасибо.
     
    _________________________
  2. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    NetSter
    Один из вариантов:
    Form1:
    Code:
    public partial class Form1 : Form
        {
            public Form1()
            {
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2(this);
                this.Hide();
                f2.Show();            
            }
    
            public string getString()
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(textBox1.Text);
                sb.Append(textBox2.Text);
                sb.Append(textBox3.Text);
                sb.Append(textBox4.Text);
                return sb.ToString();            
            }
        }
    Form2:
    Code:
        
    public partial class Form2 : Form
        {
            private Form1 _f1;
            public Form2(Form1 f1)
            {           
                _f1 = f1;
            }
    
            private void Form2_Load(object sender, EventArgs e)
            {
                richTextBox1.Text = _f1.getString();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                _f1.Show();
                this.Close();
            }
        }
     
  3. vicgerrard

    vicgerrard New Member

    Joined:
    4 Apr 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Во-первых, надо поставить значения свойства Modifers у ричтекстбокса на public, а дальше уже вот так:
    На первой форме в нужном месте пишем:
    Code:
    frm2 frm = new frm2();
    frm.RichTextBox1.Text += textBox1.Text;
    frm.RichTExtBox1.TExt += textBox2.Text;
    ...
    frm.RichTextBox1.Text += textBox100.Text;
    frm.ShowDialog(this);
    frm.Dispose();
    
    
    Не забываем добавить в проект форму с именем frm2.cs
     
    #3 vicgerrard, 22 Apr 2010
    Last edited: 22 Apr 2010
  4. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    :confused: :confused: :confused:
    А во-вторых...???
     
  5. vicgerrard

    vicgerrard New Member

    Joined:
    4 Apr 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Это так принципиально ?
    Я ведь написал: "Во-первых .... ну а дальше"
     
  6. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    Да как-то, что ли "не по взрослому" делать public'ом, уж лучше не полениться и геттер сделать, тем более
    возможно все данные с текстбоксов нужно как-то обработать...


    "Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете." (С) Стив Макконнелл
     
    #6 0kt0ber, 22 Apr 2010
    Last edited: 22 Apr 2010
  7. vicgerrard

    vicgerrard New Member

    Joined:
    4 Apr 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Мне 14 лет, неделю назад только закончил курс с# (на 5. кстати), говорю, как умею )
     
  8. ichechen

    ichechen New Member

    Joined:
    16 Oct 2009
    Messages:
    33
    Likes Received:
    4
    Reputations:
    8
    Spy++

    Вроде тема по теме ))))
    В общем, очень нужна утилита Spy++ у кого есть скиньте пожалуйста :)

    P.S.
    http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Mixture/DataTransfer/217a.mspx
     
    #8 ichechen, 22 Apr 2010
    Last edited: 22 Apr 2010
  9. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    1 person likes this.
  10. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    у тебя там должен быть файлик Program.cs, в нём происходит запуск твоей первой формы. Предлагаю в классе первой формы сделать публичный метод(или несколько публичных полей), для передачи данных вверх. В Program.cs ты запустишь первую форму, после чего закроешь, получишь данные и передашь их во вторую форму.
     
  11. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Ошибка.
    В экземпляре объекта не задана ссылка на объект.
     
    _________________________
  12. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    Source
    Тут в сети недавно появился отличный скан интересной книги "Троелсен Э. - Язык программирования С 2008 и платформа. NET 3.5 (4-е изд., 2010)" может почитать основы, чтобы небыло таких вопросов... :rolleyes:
     
    #12 0kt0ber, 23 Apr 2010
    Last edited: 23 Apr 2010
  13. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Я знаю 3 метода передачи данных между формами:
    1) Написать свойство
    2) Сделать richtextbox public(самый простой)
    3) Создать обьект класса формы
    И это еще не все методов очень много так что выбор остается за тобой ;)
     
    #13 cheater_man, 23 Apr 2010
    Last edited: 23 Apr 2010
  14. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    сегодня в универе на лабе разобрался.
    сделал таким образом.
    (пока работает, так и будет, жду критики и предложений по оптимизации и т.д. других способов написания :) )

    Первая форма

    PHP:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace 
    WindowsFormsApplication1
    {
        public 
    partial class Form1 Form
        
    {
            public 
    Form1()
            {
                
    InitializeComponent();
            }

            private 
    void button1_Click(object senderEventArgs e)
            {
                
    Form2 Form2 = new Form2();
                
    Form2.mess textBox1.Text;
                
    this.Hide();
                
    Form2.Show();
            }
        }
    }
    вторая форма
    PHP:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace 
    WindowsFormsApplication1
    {
        public 
    partial class Form2 Form
        
    {
            public 
    string mess;
            public 
    Form2()
            {
                
    InitializeComponent();
            }

            private 
    void Form2_Load(object senderEventArgs e)
            {
                
    textBox1.Text mess;
            }
        }
    }
    знаю, это примитив. если есть предложения написать все "как лучше" - велком)
    всем спасибо кто отписался! ;)
     
    _________________________
  15. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    а когда вторая форма закроется как ты первую опять покажешь?
    Я же дал рабочий вариант, неужели не разобрался? :confused:
     
  16. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    щя гляну, я сутра видел но не было времени посмотреть сорсы.
    а в универе вроде все заработало, и я не смотрел.
     
    _________________________
  17. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    NetSter, нормальный простой логичный вариант решения. Чем проще, тем лучше.