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

Передача данных с формы на форму с использованием класса

12.06.2017, 14:13. Просмотров 902. Ответов 8

Добрый день, уважаемые формучане! Хочу сразу же извиниться если не в том разделе пишу.

Итак, уже вторые сутки маюсь, не могу никак понять что же я делаю не так.

Дано: две формы, первая форма представляет собой окно с двумя полями для ввода логина\пароля, всё стандартно. Вторая же форма, в зависимости от введенных логина\пароля принимает, например, в одном из текстовых полей значение ИмяФамилия пользователя.

Проблема в следующем: мне необходимо передать булевское значение с одной формы на другую, дабы хоть как-то идентифицировать два очень похожих класса (пользуюсь классами впервые, особо еще не разобрался что да как). Данное булевское значение - есть отдельный публичный статик класс, всего лишь с одной публчиной статик переменной:

C#
1
2
3
4
5
    
public static class Boolka
    {
        public static bool Check;
    }
На главной (первой) форме есть алгоритм проверки ввода данных, так как по условию задачи мне известно количество людей я в качестве алгоритма проверки сделал некрасивый и неэффективный If, но работающий:

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
      }
            if ((LoginTextBox.Text==Admin.Login)&&(PasswordTextBox.Text==Admin.Password))
            {
                AdminForm.Show();
                this.Hide();
            }
            else
            {
                if ((LoginTextBox.Text == SuperVisors.Login) && (PasswordTextBox.Text == SuperVisors.Password))
                {
                    SuperForm.Show();
                    this.Hide();
                }
                else
                {
                    if ((LoginTextBox.Text == User1.Login) && (PasswordTextBox.Text == User1.Password))
                    {
                        Boolka.Check = true;
                        this.Hide();
                        WorkForm.Show();
                    }
                    else
                    {
                        if ((LoginTextBox.Text == User2.Login) && (PasswordTextBox.Text == User2.Password))
                        {
                            Boolka.Check = false;
                            this.Hide();
                            WorkForm.Show();
                        }
                        else
                        {
                            if ((LoginTextBox.Text == "") || (PasswordTextBox.Text == ""))
                            {
                                MessageBox.Show("Одно из полей оставлено пустым!");
                            }
                            else
                            {
                                MessageBox.Show("Вы ввели неверное имя или пароль!");
                            }
                        }
                    }
                }
            }
        }
Обратите пожалуйста внимание на переменную "boolka" - именно здесь и происходит смена значения (при одном из вариантов введенных данных) булевой переменной. Всё работает прекрасно, даже МесседжБокс на просмотр вставлял - всё чисто, всё меняет.

Но, когда дело доходит до второй формы, та просто перезаписывает его в "False"! Оставляя меня только с одним рабочим пользователем! Вот код второй формы, где идёт проверка булевого значения:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public partial class WorkerForm : Form
    {
        EntryForm Transfer;
        public WorkerForm(object parent_form)
        {
            Transfer = parent_form as EntryForm;
            InitializeComponent();
 
            MessageBox.Show("DEBUG: "+Boolka.Check);
 
            if (Boolka.Check==true)
            {
                WorkerNameSurnameLabel.Text = Transfer.WorkerNameData1;
                OnStandByTaskTextBox.Text = Convert.ToString(Worker.ActiveTaskCounter);
                FinishedTaskTextBox.Text = Convert.ToString(Worker.FinishedTaskCounter);
            }
            else
            {
                WorkerNameSurnameLabel.Text = Transfer.WorkerNameData2;
                OnStandByTaskTextBox.Text = Convert.ToString(Worker2.ActiveTaskCounter);
                FinishedTaskTextBox.Text = Convert.ToString(Worker2.FinishedTaskCounter);
            }
        }
Я причем пытался по-разному делать:
1) Передеча аргументов в конструктор без использования классов - не сработало, та же проблема.
2) Объявление первой формы в кач-ве материнской и передача значений напрямую с первой формы. (Вы можете увидеть куски строк типа EntryForm Transfer и object parent_form) - не сработало, та же проблема.
3) Пытался просто классы "рабочих" модифицировать, впаять каждому по булевой переменной и в зависимости от введенных данных делать ложным одного или другого.
4) Пытался просто в один класс двух рабочих запихнуть - тоже не помогло.

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

Передача экземпляра класса из формы в форму
Собственно, не уверен, что нужно именно то, что я написал в сабже. Ситуация...

Передача из одной формы в другую с использованием Класса Глобальных переменных
Доброго времени суток. Пишу программу и возникла ошибка. Из формы 1(Main) в...

Передача данных с формы на форму
У меня есть конпка(button5), в ней textBox2 с которого идет запись...

Передача данных из 2 формы в 3 форму
Есть три формы: первая, есть кнопка которая вызывает вторую в ней listbox, из...

Передача данных из формы 2 в форму 1
Здравствуйте. Подскажите, пожалуйста, как из формы 2 перенести данные, которые...

8
SeIZVeIZ
661 / 615 / 258
Регистрация: 08.02.2014
Сообщений: 1,890
Завершенные тесты: 3
12.06.2017, 14:39 #2
проект не большой? скинь лучше его, ибо такого поведения на "тестах" у себя не повторяются, всё меняется как нужно
1
Eto_Demerzel
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 5
12.06.2017, 14:50  [ТС] #3
Здравствуйте, SeIZVeIZ. Проект небольшой, состоит из 4 форм, 1 класса и 4 подклассов. В упаковке 7зип весит 79 кбайт. Если вы действительно планируете посмотреть и потестировать, то обращайте внимание на формы с именем: CredentialForm.cs и WorkForm.cs - именно между ними должен обмен данными происходить. Две другие трогать не стоит, они работают нормально.

Кстати забыл упомянуть важную деталь - условие не работает только в том месте где разворачивается конструктор. Ниже в форме с работниками идёт еще одно условие - оно работает, причем ОНО ПОЛУЧИЛО значение переменной из первой формы. Непонятно теперь только почему при инциализации условие не работает.

Я добавил вложение, проверьте под моим сообщением.
0
Вложения
Тип файла: zip JobTestTaskSolution.zip (78.9 Кб, 4 просмотров)
Someone007
2175 / 1765 / 797
Регистрация: 09.05.2015
Сообщений: 4,360
Завершенные тесты: 1
12.06.2017, 15:11 #4
Лучший ответ Сообщение было отмечено Eto_Demerzel как решение

Решение

У вас переменная выставляется в true/false после того как форма WorkerForm создана, соответственно в конструкторе формы у вас значение до изменения...
Перенесите строку
C#
1
WorkerForm WorkForm = new WorkerForm(this);
таким образом чтобы она была после того как вы выставите вашей переменной нужное значение.

P.S. А вообще ужасный код...
1
Eto_Demerzel
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 5
12.06.2017, 15:21  [ТС] #5
Добавлено через 6 минут
Здравствуйте, Someone007! Скажите пожалуйста, а тогда как мне засунуть значения "при загрузке" формы? Так, чтобы конструктор не записывал старые, до изменений.

Господи, простите меня дурака! Вообщем всё оказалось гораздо проще, существуют так называемые события, можно было просто поставить как раз то самое "при загрузке" на вторую форму.

Огромное Вам спасибо, Someone007!
0
SeIZVeIZ
661 / 615 / 258
Регистрация: 08.02.2014
Сообщений: 1,890
Завершенные тесты: 3
12.06.2017, 15:22 #6
Eto_Demerzel, вот так Вам нужно, а не при инициализации
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void WorkerForm_Shown(object sender, EventArgs e)
        {
            MessageBox.Show("DEBUG: " + Boolka.Check);
 
            if (Boolka.Check == true)
            {
                WorkerNameSurnameLabel.Text = Transfer.WorkerNameData1;
                OnStandByTaskTextBox.Text = Convert.ToString(Worker.ActiveTaskCounter);
                FinishedTaskTextBox.Text = Convert.ToString(Worker.FinishedTaskCounter);
            }
            else
            {
                WorkerNameSurnameLabel.Text = Transfer.WorkerNameData2;
                OnStandByTaskTextBox.Text = Convert.ToString(Worker2.ActiveTaskCounter);
                FinishedTaskTextBox.Text = Convert.ToString(Worker2.FinishedTaskCounter);
            }
        }
1
Eto_Demerzel
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 5
12.06.2017, 15:25  [ТС] #7
Кликните здесь для просмотра всего текста

Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
Eto_Demerzel, вот так Вам нужно, а не при инициализации
C#
Выделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void WorkerForm_Shown(object sender, EventArgs e)
{
MessageBox.Show("DEBUG: " + Boolka.Check);
if (Boolka.Check == true)
{
WorkerNameSurnameLabel.Text = Transfer.WorkerNameData1;
OnStandByTaskTextBox.Text = Convert.ToString(Worker.ActiveTaskCounter);
FinishedTaskTextBox.Text = Convert.ToString(Worker.FinishedTaskCounter);
}
else
{
WorkerNameSurnameLabel.Text = Transfer.WorkerNameData2;
OnStandByTaskTextBox.Text = Convert.ToString(Worker2.ActiveTaskCounter);
FinishedTaskTextBox.Text = Convert.ToString(Worker2.FinishedTaskCounter);
}
}


Понял, Вас! Спасибо, SeIZVeIZ!
0
Someone007
2175 / 1765 / 797
Регистрация: 09.05.2015
Сообщений: 4,360
Завершенные тесты: 1
12.06.2017, 16:12 #8
Eto_Demerzel, переделал ваш код в более-менее нормальный, а то у вас там вообще ужас был...
Работники со статическими полями, формы куда-то зачем-то передаются, куча ненужных полей и т.д.
1
Вложения
Тип файла: zip JobTestTaskSolution.zip (27.1 Кб, 5 просмотров)
Eto_Demerzel
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 5
12.06.2017, 16:21  [ТС] #9
Еще раз, огромное Вам спасибо, Someone007. Простите, что заставил потратить Ваше личное время на разгребание моей "каши". Видите ли, я студент СПО 3 курс, с классами и списками еще как-то не приходило сталкиваться, поэтому я пытался достичь результата теми знаниями, которые были на данный момент в голове ну и плюсом экспериментировал с классами.

Насколько я понял вы сделали списки и как-то переделали классы. Я, к сожалению, не понимаю всё до конца (большую часть даже), но хочу еще раз поблагодарить Вас, ведь у меня теперь если что - есть живой пример в виде редактированной Вами программы! Спасибо!
0
12.06.2017, 16:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2017, 16:21

Передача данных из формы в форму
Помогите пожалуйста исправить ошибку: namespace megasreda { public...

Передача данных из формы в форму
проблема заключается в том что , данные авторизуются , но при этом не...

Передача данных из формы в другую форму
Здравствуйте, подскажите, пожалуйста. Мне нужно передавать данные из одной...


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

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

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