Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 15

Взаимосвязь 3-х форм

06.05.2014, 01:03. Показов 3664. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи, дамы и господа, я долго искал решение в данном ресурсе и в итоге мои поиски не увенчались успехом.
Суть проблемы такова: 1-я форма главная, из неё вызываю 2-ю, в которой представляется информация, взятая из DGV 1-й формы (на данном этапе полёт нормальный), во второй форме по нажатию кнопки открывается третья, в которой используется информация из 2-й (полёт так же нормальный) и после редактирования должна записываться обратно в DGV 1-й формы(вот тут происходит конфуз).
И я даже понял, почему такой конфуз происходит.
после запуска 3-й формы, 1-ю, как лок. переменную, он видит как null. как от этого избавиться?
Миниатюры
Взаимосвязь 3-х форм  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2014, 01:03
Ответы с готовыми решениями:

Взаимосвязь форм
ЗАдача такая! Помогите прошу! Основная форма не запускается пока во второй форме я не введу 2 переменных и их перенесет в основную...

Взаимосвязь проектов
У меня есть решение, в котором несколько проектов. Один из проектов создает dll-ку, которая должна получать некоторые параметры из главного...

Взаимосвязь между 2-мя ListBox
Здраствуйте, можно ли сделать так чтоб при выборе значения 1-го listbox выбиралось значение 2-го?

53
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 15
06.05.2014, 20:07  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от insite2012 Посмотреть сообщение
booleanhater, я подумаю. Может что и придумается. Сроки сдачи работы? Наверное, еще вчера?
Сроки сдачи - еще в конце прошлой сессии, точной даты не помню, приблизительно после нового года. Нынешний дедлайн - послезавтра (надо иметь уже рабочую программу)

В любом случае спасибо за помощь.

И всё же главные 2 вопроса которые меня сейчас интересуют - как склеить эл-ты типа char, т.к. операция + не может с ними использоваться, конкантенация вроде только с типом string, а массивом символы тоже не вбить. И 2-й - можно ли из текстбокса выгрузить текст того же типа, как и загружался?
Если подскажете решение по ним - буду крайне благодарен.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.05.2014, 21:27
Цитата Сообщение от booleanhater Посмотреть сообщение
как склеить эл-ты типа char
C#
1
2
char[] myChar={'A','B,'C'};
string myString=new string(myChar);
Добавлено через 1 минуту
Цитата Сообщение от booleanhater Посмотреть сообщение
можно ли из текстбокса выгрузить текст того же типа
Свойство текстбокса Text возвращает строку. Это тип string.
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 15
06.05.2014, 22:55  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
C#
1
2
char[] myChar={'A','B,'C'};
string myString=new string(myChar);
Добавлено через 1 минуту

Свойство текстбокса Text возвращает строку. Это тип string.
оба ответа не помогли, т.к. тип string не хочет загружаться в ячейку, с типом nvachar, но всё равно спасибо за помощь.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
07.05.2014, 00:09
Цитата Сообщение от booleanhater Посмотреть сообщение
тип string не хочет загружаться в ячейку, с типом nvachar
откровенная ересь.
Почитай внимательно текст ошибки, скорее всего там что-нибудь типа: "Нельзя добавлять данные в DGV, когда он связан с источником данных"
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 15
07.05.2014, 00:12  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
C#
1
2
char[] myChar={'A','B,'C'};
string myString=new string(myChar);
Добавлено через 1 минуту

Свойство текстбокса Text возвращает строку. Это тип string.
ПРЕОГРОМНЕЙШЕ ПРОШУ ПРОЩЕНИЯ!
видимо я где-то накосячил и не так это интерпретировал, тип string стал заливаться в dgv.
тему, думаю, можно закрывать, огромное спасибо всем, кто откликнулся, все добра.

Добавлено через 2 минуты
Цитата Сообщение от nio Посмотреть сообщение
откровенная ересь.
Почитай внимательно текст ошибки, скорее всего там что-нибудь типа: "Нельзя добавлять данные в DGV, когда он связан с источником данных"
Не, старик, я щас в кратце опишу свои действия до и после, а там уже гадай "почему оно не работало?"
C#
1
f1.dataGridView1.Rows[rowIndex].Cells[1].Value = fio.Text;
Такой вариант не работал
C#
1
f1.dataGridView1.Rows[rowIndex].Cells[1].Value = fio.Text.ToString();
Такой вариант сработал, хотя чёрт его знает, может не только по-этому.
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
07.05.2014, 07:46
Цитата Сообщение от booleanhater Посмотреть сообщение
Если есть особое желание, могу скинуть проект или же определенные части кода.
скинь проект
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
07.05.2014, 09:26
Цитата Сообщение от booleanhater Посмотреть сообщение
а там уже гадай "почему оно не работало?"
зачем гадать? студия пишет все ошибки.
fio.Text какого типа?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
07.05.2014, 09:49
Лучший ответ Сообщение было отмечено booleanhater как решение

Решение

Не буду утверждать что хорошо знаю таблицы, поскольку с ними вообще не работал, потому извиняюсь за этот корявый пример. Но на мой взгляд, самый простой вариант-перебрасывать между формами не куски данных, а объект. К примеру, DataTable. Так оптимально (как я считаю). Вот мой пример, который по быстрому накидал.
Форма 1, на ней кнопка и датагридвью (основная форма).
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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 WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        //Переменная таблицы (В форме 1)
        private DataTable dt;
        //Ссылка на форму 2
        private Form2 F2;
 
        public Form1()
        {
            InitializeComponent();
            //Обработчик загрузки формы
            this.Load += delegate { ShowDataTable(); };
            //Обработчик нажатия кнопки
            button1.Click += delegate { SendDataToForm2(); };
            //Проверка формы 2 на null и подписка на ее событие
            if (F2 != null)
            {
                F2.form2Event += delegate(object sender, MyEventArgs e)
                {
                    dataGridView1.DataSource = e.MyTable;
                };
            }
        }
        //Метод формирования таблицы
        private void ShowDataTable()
        {
            dt = new DataTable("My Table");
            dt.Columns.Add(new DataColumn("Column 1", typeof(int)));
            dt.Columns.Add(new DataColumn("Column 2", typeof(string)));
            dt.Columns.Add(new DataColumn("Column 3", typeof(string)));
 
            dt.Rows.Add(1, "Data 1-1", "Data 1-2");
            dt.Rows.Add(2, "Data 2-1", "Data 2-2");
            dataGridView1.DataSource = dt;
        }
        //Метод вывода второй формы
        private void SendDataToForm2()
        {
            F2 = new Form2(dt);
            F2.ShowDialog();
        }
    }
}
Форма 2, вызывается из формы 1. На ней 3 текстовых поля.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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 WindowsFormsApplication3
{
    public partial class Form2 : Form
    {
        //Переменная таблицы (в форме 2)
        DataTable Form2DataTable;
        //Событие формы 2
        public event EventHandler<MyEventArgs> form2Event;
        //Конструктор формы 2, с параметром типа DataTable
        public Form2(DataTable dt)
        {
            InitializeComponent();
            //Присваиваем ссылку на таблицу формы 2
            Form2DataTable = dt;
            //Получаем коллекцию строк
            DataRowCollection rows = Form2DataTable.Rows;
            //Выводим строку 1 в текстбоксы
            textBox1.Text = rows[0][0].ToString();
            textBox2.Text = rows[0][1].ToString();
            textBox3.Text = rows[0][2].ToString();
            //Обработчик события закрытия формы
            this.FormClosing += delegate { Form2Closing(); };
        }
        //Метод закрытия формы
        private void Form2Closing()
        {
            //Заполняем таблицу данной формы (строка 1) данными из текстбоксов
            Form2DataTable.Rows[0][0] = textBox1.Text;
            Form2DataTable.Rows[0][1] = textBox2.Text;
            Form2DataTable.Rows[0][2] = textBox3.Text;
            //Проверяем есть ли подписчики на событие
            //и генерируем событие с нашим аргументом
            if (form2Event != null)
            {
                form2Event(this, new MyEventArgs(Form2DataTable));
            }
        }
    }
    //Класс нашего аргумента, передает данные в виде таблицы DataTable
    public class MyEventArgs : EventArgs
    {
        public readonly DataTable MyTable;
        public MyEventArgs(DataTable dt)
        {
            MyTable = dt;
        }
    }
}
Можно и третью сюда прикрутить, но принцип, думаю, и так будет ясен.
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.05.2014, 10:03
Цитата Сообщение от booleanhater Посмотреть сообщение
(вот тут происходит конфуз).
И я даже понял, почему такой конфуз происходит.
после запуска 3-й формы, 1-ю, как лок. переменную, он видит как null. как от этого избавиться?
А с какой стати формы должны быть представлены локальными переменными в отдельных областях видимости? Формы должны лежать или в одной области, или в глобальных/экспортируемых переменных.
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 15
07.05.2014, 19:38  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
fio.Text какого типа?
как и .Text Любого текстбокса, string.
Кстати, видел в другом разделе ваш вопрос на тему "ячейка не апдейтится, если не был переведён курсор", вы нашли решение?

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
А с какой стати формы должны быть представлены локальными переменными в отдельных областях видимости? Формы должны лежать или в одной области, или в глобальных/экспортируемых переменных.
ну когда внутри другой формы пишешь Form1 f1=this.Owner as Form1;
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.05.2014, 09:14
Цитата Сообщение от booleanhater Посмотреть сообщение
внутри другой формы пишешь Form1 f1=this.Owner as Form1;
С какой стати? Импортируй ту же самую первую форму.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.05.2014, 12:33
Цитата Сообщение от booleanhater Посмотреть сообщение
вы нашли решение?
Частично. Работать необходимо обязательно через BindingSource и перед сохранением нужно вызвать BindingSource.EndEdit(). Но при этом ячейка всё равно должна быть выведена из режима редактирования. Т.е. при окончании ввода необходимо нажать "Ввод". Перестановка курсора тоже выводит ячейку из редактирования. Как сделать это программно, я тогда не нашёл
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.05.2014, 12:48
Ну как бы если ячейка в процессе, то её данные и не предназначены для использования где бы то нибыло кроме самой процедуры ввода, индикатора положения курсора и фоновой проверки правильности ввода (от орфографии до соответствия формату). И обновление индикатора, и вызов фоновой проверки отлично делается из обработчика, при этом недовведённое значение, если оно доступно хотябы обработчику, можно передать в параметр, а в индикатор надо передавать готовые значения, уже полученные в обработчике. И того: единственное место, где действительно необходим доступ к редактируемому значению, это обработчики событий, происходящих в процессе редактирования. И они уж точно не валяются в коде другой формы.
0
33 / 31 / 7
Регистрация: 16.08.2012
Сообщений: 126
08.05.2014, 12:53
передавай bindingSource м-ду форма ми

добавь в формах конструктор
C#
1
2
3
4
5
 Form(BindingSource bs)
{
   this.bindingSource = bs;
   InitializeComponent();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2014, 12:53

Взаимосвязь SslClient с lsass.exe
Дело в том что в софте используется некоторые классы из System.Security.Cryptography и SslClient, который в нескольких потоках подключается...

Передать из форм 1, в форм 3.
я перелазил весь форум но так и непонял как передать инфу с textbox3 в textbox1. (из 3 формы в 1) розъясните,

Объявление форм для доступа к ним из других форм проекта
Поскажите, пожалуйста, как правильно объявить форму, что бы доступ к её элементам можно было получать из других форм?

Связывание двух форм по расположению на мониторе(Синхронизация форм)
Такая проблема, представим если 2 формы, на первой форме есть клавиша &quot;На вторую форму&quot;, которая будет иметь код: ...

Как по закрытию форм 2 сделать определенное действие в форм 1?
Здравствуйте! Помогите пожалуйста, я новичок в ) Столкнулся с проблемой и не смог найти ответа на форумах. В кратце- есть 2 формы....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru