Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
1
.NET 4.x

Почему в форме 2 не берет элементы list с формы 1?

17.09.2018, 17:05. Показов 1243. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код 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
public partial class Form1 : Form
{
 
public List<string>NepravilnijeOtveti; 
 
public Form1()
{
InitializeComponent();
NepravilnijeOtveti = new List<string>();
}
 
private void Knopka_Click(object sender, EventArgs e)
{
 
//ТУТ, LIST "NepravilnijeOtveti", ЗАПОЛНЯЕТСЯ СЛОВАМИ И ТОГДА Я ДЕЛАЮ ТАКОЕ:
 
foreach (var item in NepravilnijeOtveti)
{
MessageBox.Show(item); // ПРОВЕРЯЮ, ТОЧНО ЛИ ВЫВОДИТ. Оно выводит
}
 
Form2 settingsForm = new Form2(); // И ОТКРЫВАЮ ФОРМУ 2
settingsForm.Show();
 
}
}
ФОРМА 2:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public partial class Form2 : Form
{
Form1 showMistakes = new Form1();
public Form2()
{
InitializeComponent();
}
 
private void Form2_Load(object sender, EventArgs e)
{
 
foreach (var item in showMistakes.NepravilnijeOtveti)
{
MessageBox.Show(item); // И ОН НЕ ПОКАЗЫВАЕТ НИЧЕГО, ХОТЯ В ФОРМЕ 1 ПОКАЗЫВАЕТ
}
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2018, 17:05
Ответы с готовыми решениями:

Почему в list записываются лишние элементы?
Вообщем в list помимо 10 рандомных элементов записыватся 10 нулей, как сделать так чтоб в list было...

Почему не отображаются элементы в форме?
В конструкторе все видно а в форме ничего почему не отображается?

Создать List массив из класса, сразу задав ему элементы и их значения из данных формы
Есть массив // Массив настроек public List&lt;settsData&gt; settData = new...

Элементы на форме ловят нажатие на клавиши раньше формы
Здравствуйте, вот уже который день гуглю и нахожу только единственное решение данной...

7
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
17.09.2018, 17:23 2
Лучший ответ Сообщение было отмечено Terminator004 как решение

Решение

Потому что вы в Form2 создаете новый экземпляр Form1, который не имеет ничего общего с экземпляром Form1 в котором вы проверяли значения.

Вот так должно работать
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
        public partial class Form1 : Form
        {
            public List<string> NepravilnijeOtveti;
 
            public Form1()
            {
                InitializeComponent();
                NepravilnijeOtveti = new List<string>();
            }
 
            private void Knopka_Click(object sender, EventArgs e)
            {
                //ТУТ, LIST "NepravilnijeOtveti", ЗАПОЛНЯЕТСЯ СЛОВАМИ И ТОГДА Я ДЕЛАЮ ТАКОЕ:
 
                foreach (var item in NepravilnijeOtveti)
                {
                    MessageBox.Show(item); // ПРОВЕРЯЮ, ТОЧНО ЛИ ВЫВОДИТ. Оно выводит
                }
 
                Form2 settingsForm = new Form2(this); // И ОТКРЫВАЮ ФОРМУ 2
                settingsForm.Show();
            }
        }
 
        public partial class Form2 : Form
        {
            Form1 showMistakes;
 
            public Form2(Form1 form1)
            {
                showMistakes = form1;
                InitializeComponent();
            }
 
            private void Form2_Load(object sender, EventArgs e)
            {
                foreach (var item in showMistakes.NepravilnijeOtveti)
                {
                    MessageBox.Show(item); // И ОН НЕ ПОКАЗЫВАЕТ НИЧЕГО, ХОТЯ В ФОРМЕ 1 ПОКАЗЫВАЕТ
                }
            }
        }
1
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
17.09.2018, 17:35  [ТС] 3
Someone007,
А почему на этот: in showMistakes.NepravilnijeOtveti) во 2 форме,
указывает ошибку System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта.".
В 1 форме ошибок нет, когда вывожу текст.
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
17.09.2018, 17:39 4
Уверены что мой код правильно скопировали? Ошибки быть не должно если в первой форме их нет.
1
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
17.09.2018, 17:52  [ТС] 5
Someone007,
в форме 2, все Form1 showMistakes; поддчеркивает зеленым и пишет:
Миниатюры
Почему в форме 2 не берет элементы list с формы 1?  
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
17.09.2018, 17:58 6
Проверьте код еще раз, он отличается от того что я написал.
1
3 / 2 / 1
Регистрация: 14.09.2016
Сообщений: 501
17.09.2018, 18:17  [ТС] 7
Someone007, а почему во второй форме showMistakes, если мы его не создавали

Добавлено через 6 минут
Я посмотрел ещё раз, ошибок не нашел

Добавлено через 3 минуты
Someone007,
Ааа.. нашел ошибку! Она была в форме 2, я не написал showMistakes = form1;

Добавлено через 22 секунды
Спасибо
0
Эксперт .NET
17686 / 12872 / 3365
Регистрация: 17.09.2011
Сообщений: 21,138
17.09.2018, 18:22 8
Если вторая форма нужна только для того, чтобы вывести список ошибок, то зачем в нее передавать целиком первую форму?
Немаловажное правило хорошей архитектуры: передавайте и требуйте минимум того, что нужно для достижения цели.
В данном случае передавать достаточно набор ошибок:
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
public partial class Form2 : Form
{
    readonly IEnumerable<string> mistakes;
 
    public Form2() : this(Enumerable.Empty<string>())
    {
    }
 
    public Form2(IEnumerable<string> mistakes)
    {
        this.mistakes = mistakes ?? throw new ArgumentNullException(nameof(mistakes));
        InitializeComponent();
    }
 
    private void Form2_Load(object sender, EventArgs e)
    {
 
        foreach (var item in mistakes)
        {
            MessageBox.Show(item);
        }
 
    }
}
И в первой форме:
C#
1
2
Form2 settingsForm = new Form2(NepravilnijeOtveti.AsReadOnly()); // И ОТКРЫВАЮ ФОРМУ 2
settingsForm.Show();
0
17.09.2018, 18:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.09.2018, 18:22
Помогаю со студенческими работами здесь

Почему код не берет значения из файла?
program Project8; {$APPTYPE CONSOLE} {$R *.res} uses Windows; const Nmax = 10;

Обновить элементы управления формы после действий в другой форме
Как можно обновить содержимое ComboBox и DataGridView после того, как в другой форме было сделано...

Почему пропадают элементы в конструкторе формы?
Добрый день. Не могу понять почему пропадают элементы в конструкторе формы. Что делал до этого: У...

Почему JSP не берет больше одного значения как параметер
Есть поле которое заполняется из базы данных, но почему-то выводится одно слово из трех. Передается...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru