Просмотр полной версии : [C#] Обмен данными между формами.
Всем привет.
Шарп изучаю недавно так что выручайте)
Есть ситуация.
В форме 1 посредством разных действий получили информацию, вывели в разные текстбоксы (штук 5, это не особо важно).
Теперь по клику кнопки нужно собрать все данные с текстбоксов, форму 1 спрятать, запустить форму 2, в которой уже есть RichTextBox, в который нужно все данные записать (не по нажатию батона на форм2 а сразу при загрузке формы2).
для примера 2 чистых формы с текстбооксом и батоном.
Код формы1
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 sender, EventArgs e)
{
Form Form1 = new Form1();
Form Form2 = new Form2();
this.Hide();
Form2.Show();
}
}
}
и вторая форма
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 sender, EventArgs e)
{
Form Form1 = new Form1();
Form Form2 = new Form2();
Form1.Show();
this.Close();
}
}
}
теперь самое вкусненькое)
так как все таки заставить форму2 при загрузке (самой формы) заполнить ричтекстбокс формы2 тесктом который находится в текстбоксе формы1.
тестовый примитивный пример проекта лежит по ссылке http://dump.ru/file/4539450
Помогите, без Вас никак)
Спасибо.
NetSter
Один из вариантов:
Form1:
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:
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();
}
}
vicgerrard
22.04.2010, 22:47
Во-первых, надо поставить значения свойства Modifers у ричтекстбокса на public, а дальше уже вот так:
На первой форме в нужном месте пишем:
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
Во-первых, надо поставить значения свойства Modifers у ричтекстбокса на public...
:confused: :confused: :confused:
А во-вторых...???
vicgerrard
22.04.2010, 22:55
:confused: :confused: :confused:
А во-вторых...???
Это так принципиально ?
Я ведь написал: "Во-первых .... ну а дальше"
Это так принципиально ?
Да как-то, что ли "не по взрослому" делать public'ом, уж лучше не полениться и геттер сделать, тем более
...
Теперь по клику кнопки нужно собрать все данные с текстбоксов, форму 1 спрятать, запустить форму 2
...
возможно все данные с текстбоксов нужно как-то обработать...
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете." (С) Стив Макконнелл
vicgerrard
22.04.2010, 23:07
Да как-то, что ли "не по взрослому" делать public'ом, уж лучше не полениться и геттер сделать, тем более
возможно все данные с текстбоксов нужно как-то обработать...
Мне 14 лет, неделю назад только закончил курс с# (на 5. кстати), говорю, как умею )
ichechen
22.04.2010, 23:30
Вроде тема по теме ))))
В общем, очень нужна утилита Spy++ у кого есть скиньте пожалуйста :)
P.S.
Передача данных
http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Mixture/DataTransfer/217a.mspx
Spy++ от VS2010RC (http://rapidshare.com/files/378942671/spyxx.rar.html)
из папки с установленной студии
у тебя там должен быть файлик Program.cs, в нём происходит запуск твоей первой формы. Предлагаю в классе первой формы сделать публичный метод(или несколько публичных полей), для передачи данных вверх. В Program.cs ты запустишь первую форму, после чего закроешь, получишь данные и передашь их во вторую форму.
NetSter
.....Form2:
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();
}
}
Ошибка.
В экземпляре объекта не задана ссылка на объект.
Ошибка.
В экземпляре объекта не задана ссылка на объект.
Source (http://rapidshare.com/files/378982545/forms.rar.html)
Тут в сети недавно появился отличный скан интересной книги "Троелсен Э. - Язык программирования С 2008 и платформа. NET 3.5 (4-е изд., 2010)" может почитать основы, чтобы небыло таких вопросов... :rolleyes:
cheater_man
23.04.2010, 10:16
Я знаю 3 метода передачи данных между формами:
1) Написать свойство
2) Сделать richtextbox public(самый простой)
3) Создать обьект класса формы
И это еще не все методов очень много так что выбор остается за тобой ;)
сегодня в универе на лабе разобрался.
сделал таким образом.
(пока работает, так и будет, жду критики и предложений по оптимизации и т.д. других способов написания :) )
Первая форма
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 sender, EventArgs e)
{
Form2 Form2 = new Form2();
Form2.mess = textBox1.Text;
this.Hide();
Form2.Show();
}
}
}
вторая форма
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 sender, EventArgs e)
{
textBox1.Text = mess;
}
}
}
знаю, это примитив. если есть предложения написать все "как лучше" - велком)
всем спасибо кто отписался! ;)
сегодня в универе на лабе разобрался.
сделал таким образом.
(пока работает, так и будет, жду критики и предложений по оптимизации и т.д. других способов написания :) )
...
знаю, это примитив. если есть предложения написать все "как лучше" - велком)
всем спасибо кто отписался! ;)
а когда вторая форма закроется как ты первую опять покажешь?
Я же дал рабочий вариант, неужели не разобрался? :confused:
а когда вторая форма закроется как ты первую опять покажешь?
Я же дал рабочий вариант, неужели не разобрался? :confused:
щя гляну, я сутра видел но не было времени посмотреть сорсы.
а в универе вроде все заработало, и я не смотрел.
NetSter, нормальный простой логичный вариант решения. Чем проще, тем лучше.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot