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

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

06.05.2014, 01:03. Показов 3629. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru