Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Green01
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 104
#1

Как передать значение переменной из одной формы в другую? - C#

18.09.2016, 23:22. Просмотров 660. Ответов 10
Метки нет (Все метки)

Здравствуйте! я пробую передать значение через отдельный статический класс, но оно попадает туда не сразу, а только после повторного открытия дочерней формы. Если значение изменяется, то в дочернюю форму при открытии попадает предыдущее. Почему так происходит?
http://www.cyberforum.ru/windows-forms/thread2146965.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2016, 23:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как передать значение переменной из одной формы в другую? (C#):

Как передать значение из одной формы в другую?
Столкнулся с очередной проблемой В одной форме у меня проходит тест,...

Как передать данные с одной формы на другую?
Доброго времени суток! кратко о главном, нужно из одной формы (типа...

Как передать массив из одной формы в другую
есть одна форма, у нее в коде присутствует и заполняется (считаются значения...

Как передать список из одной формы в другую?
Здравствуйте! Мне нужно передать список туристов из Form1 в Form2 , чтобы поля...

Как передать dataGridView из одной формы в другую
Необходимо передать dataGridView из одной формы в другую. Каким образом это...

10
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
18.09.2016, 23:26 #2
http://www.cyberforum.ru/windows-forms/thread110436.html

Добавлено через 48 секунд
Цитата Сообщение от Green01 Посмотреть сообщение
я пробую передать значение через отдельный статический класс, но оно попадает туда не сразу, а только после повторного открытия дочерней формы. Если значение изменяется, то в дочернюю форму при открытии попадает предыдущее
что? можно код посмотреть?
0
Green01
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 104
18.09.2016, 23:30  [ТС] #3
DevAlone, спасибо за ссылку, но я там уже искала

Код первой формы:
C#
1
2
3
4
5
6
7
8
9
10
11
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            CustomerUpdateForm customerUpdateForm = new CustomerUpdateForm();
 
            int idn = 0;
            idn = Convert.ToInt32(dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex].Cells[0].Value);
            Data.Value = idn;
 
            if (customerUpdateForm.ShowDialog() == DialogResult.OK)
                dataGridView1.DataSource = model.GetCustomers();
        }
Код второй формы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public CustomerUpdateForm()
        {
            InitializeComponent();
 
            var customers = model.GetCustomer(Data.Value);
            foreach (var customer in customers)
            {
                id = Convert.ToString(customer.id_customer);
                Fiocust = customer.fio;
                Adresscust = customer.adress;
                Phonecust = customer.phone;
                Datecust = customer.birth_date;
            }
        }
Код дополнительного класса:
C#
1
2
3
4
static class Data
    {
        public static int Value { get; set; }
    }
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
18.09.2016, 23:35 #4
public CustomerUpdateForm()
когда выполняется?
0
Green01
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 104
18.09.2016, 23:36  [ТС] #5
DevAlone, при клике на запись в datagridview
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
18.09.2016, 23:45 #6
Лучший ответ Сообщение было отмечено Green01 как решение

Решение

Не туда посмотрел, думал это метод. Так вот, при клике, вы создаёте объект CustomerUpdateForm, вызывается конструктор и в var customers помещается старое значение Data.Value и заполняется что-то этим же старым значением, затем вы меняете Data.Value на новое и показываете форму. Нужно поменять порядок действий
C++
1
2
3
4
5
6
7
8
            int idn = 0;
            idn = Convert.ToInt32(dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex].Cells[0].Value);
            Data.Value = idn;
 
            CustomerUpdateForm customerUpdateForm = new CustomerUpdateForm();
 
            if (customerUpdateForm.ShowDialog() == DialogResult.OK)
                dataGridView1.DataSource = model.GetCustomers();
А ещё здесь лучше использовать передачу через конструктор
1
Green01
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 104
18.09.2016, 23:59  [ТС] #7
DevAlone, все получилось! большое спасибо! а почему лучше через конструктор?
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
19.09.2016, 00:02 #8
Во первых потому что логичнее и сложнее допустить подобную ошибку, а во вторых, потому что передача чезер промежуточный класс в данном случае не даёт преимуществ
1
Green01
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 104
19.09.2016, 00:04  [ТС] #9
можно пример, как это сделать
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
19.09.2016, 00:25 #10
Конструктор:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public CustomerUpdateForm(int val)
        {
            InitializeComponent();
 
            var customers = model.GetCustomer(val);
            foreach (var customer in customers)
            {
                id = Convert.ToString(customer.id_customer);
                Fiocust = customer.fio;
                Adresscust = customer.adress;
                Phonecust = customer.phone;
                Datecust = customer.birth_date;
            }
        }
Вызывать так:
C#
1
2
3
4
5
6
7
8
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int idn = Convert.ToInt32(dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex].Cells[0].Value);
            CustomerUpdateForm customerUpdateForm = new CustomerUpdateForm(idn);            
 
            if (customerUpdateForm.ShowDialog() == DialogResult.OK)
                dataGridView1.DataSource = model.GetCustomers();
        }
1
Green01
0 / 0 / 1
Регистрация: 27.09.2015
Сообщений: 104
19.09.2016, 01:14  [ТС] #11
DevAlone, спасибо!
0
19.09.2016, 01:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2016, 01:14
Привет! Вот еще темы с решениями:

Как передать масив из одной формы в другую
У меня есть две формы. В первой есть масив с 10-ми значениями, и мне нужно...

Как передать данные с одной формы на другую?
как из textBox1 с form1 предать текст в textBox1 на form2?

Как из одной формы передать данные в другую?
Например, есть 2 формы: в первой textbox1 и button1, во второй textbox2....

Как с с поля одной формы передать данные в другую
Есть список в Form1 List<t>... И есть вторая форма на которой заполняются...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru