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

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

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

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

Как передать значение переменной из одной формы в другую?
У меня есть две формы. на Form1 есть textbox1, на form2 есть label1....

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

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

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

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

10
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
18.09.2016, 23:26 2
Ответы на 7 самых частых вопросов по WinForms

Добавлено через 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

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

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

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


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

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

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