Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
Eto_Demerzel
0 / 0 / 0
Регистрация: 12.06.2017
Сообщений: 5
#1

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

12.06.2017, 14:13. Просмотров 281. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передача данных с формы на форму с использованием класса (C#):

Передача экземпляра класса из формы в форму - C#
Собственно, не уверен, что нужно именно то, что я написал в сабже. Ситуация такая: имеется form1 и form2, и некий класс Hero. В form1 я...

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

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

Передача данных с формы на форму - C#
У меня есть конпка(button5), в ней textBox2 с которого идет запись данных(Координаты X и Y). С этой формы мне нужно передать записанные...

Передача данных из формы в форму - C#
Помогите пожалуйста исправить ошибку: namespace megasreda { public partial class Form21 : Form { public Form21() ...

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

8
SeIZVeIZ
593 / 550 / 199
Регистрация: 08.02.2014
Сообщений: 1,691
Завершенные тесты: 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
1877 / 1563 / 570
Регистрация: 09.05.2015
Сообщений: 3,902
Завершенные тесты: 1
12.06.2017, 15:11 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
У вас переменная выставляется в 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
593 / 550 / 199
Регистрация: 08.02.2014
Сообщений: 1,691
Завершенные тесты: 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
1877 / 1563 / 570
Регистрация: 09.05.2015
Сообщений: 3,902
Завершенные тесты: 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
Привет! Вот еще темы с ответами:

Передача данных из формы в форму - C#
проблема заключается в том что , данные авторизуются , но при этом не открывается 3 форма , что делать пока не знаю, надеюсь в вашей помощи...

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

Передача данных с DataGridView из одной формы, в другую форму с TextBox - C#
Всем Здрасти. Перерыл уже кучу информации. перепробовал кучу методов, но никак не могу сделать передачу выбранной строки DataGridView...

Передача с формы на форму - C#
Добрый вечер, я столкнулся с проблемой! мне необходимо передать значения с формы на форму, и в последствии по значению этой переменной...


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

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

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