21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
1

Обнуляется строка во время передачи данных между формами

19.10.2014, 01:42. Показов 766. Ответов 7
Метки нет (Все метки)

Всем привет.
Столкнулся с такой проблемой. В форме2 есть строковая переменная, а так же ее свойство. Данная переменная инициализируеться в функции. Но когда я обращаюсь к этому свойству в форме1, она оказывается пустой. Чего только не пробовал, ничего не помогает.

вот огрызки кода:
форма2:
создание переменной и ее свойства:
C#
1
2
3
4
5
private string login;
        public string Login
        {
            get { return login; }
        }
инициализация переменной (для проверки заполняемости переменной вывожу значение в месседжбоксе - пока все хорошо):
C#
1
2
3
4
5
6
7
8
9
10
if (textBox1.Text == loginPass[0] && textBox2.Text == loginPass[1])
                    {
                        //MessageBox.Show("аутентификация в программе прошла успешно!");
 
                        login = textBox1.Text;
 
                        DialogResult = System.Windows.Forms.DialogResult.OK;
 
                        MessageBox.Show(login);
                    }

форма1:
создание экземпляра формы 2 и новой переменной:
C#
1
2
private Form2 logForm;
        private string userLogin;
инициализация новой переменной:
C#
1
2
3
4
5
6
7
public Form1()
        {
            InitializeComponent();
 
            logForm = new Form2();
            userLogin = logForm.Login;
        }
проверка содержимого переменной (выводит пустой месседжбокс):
C#
1
2
3
4
private void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show(userLogin);
        }
Помогите, пожалуйста.
Заранее всем спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2014, 01:42
Ответы с готовыми решениями:

Ошибка при передачи данных между формами
Здравствуйте! Проблема такова: Есть две формы. Одна содержит таблицу(dataGridView) — Наименование...

Используем свойство 'родитель' для передачи данных между формами
Все делал так, как написано в инструкции, а написано там следующее: при создании второй формы...

Ответы на 7 самых частых вопросов по Windows Forms, C++/CLI Edition - свой способ передачи данных между формами
Способ с использованием макросов. Средней сложности в реализации и понимании, не знаю, нарушает ли...

Не передаётся текстовая строка между формами
что имеию: приват переменную которая должна содержать текст, для задания которой написал сеттитл...

7
8357 / 4566 / 1787
Регистрация: 11.02.2013
Сообщений: 9,671
19.10.2014, 02:01 2
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
C#
1
2
logForm = new Form2();
userLogin = logForm.Login;
Ты не показываешь вторую форму. Откуда брать значение для поля login, если никаких событий не было?
Цитата Сообщение от Аццкий Прогер Посмотреть сообщение
инициализация переменной (для проверки заполняемости переменной вывожу значение в месседжбоксе - пока все хорошо):
В каком событии? До вызова этого события поле login будет пустым.
0
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
19.10.2014, 02:07  [ТС] 3
ok, вот коды обеих форм:

форма 2:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
public partial class Form2 : Form
    {
        public Point mouse_offset;
 
        private SqlConnection connection;
        private GetConString conString;
 
        private string login;
        public string Login
        {
            get { return login; }
        }
 
        public Form2()
        {
            InitializeComponent();
 
            login = null;
 
            connection = new SqlConnection();
            conString = new GetConString();
 
            this.ActiveControl = textBox1;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void Form2_MouseDown(object sender, MouseEventArgs e)
        {
            mouse_offset = new Point(-e.X, -e.Y);
        }
 
        private void Form2_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                Point mousePos = Control.MousePosition;
 
                //определяем текущие координаты курсора
                mousePos.Offset(mouse_offset.X, mouse_offset.Y);
 
                //перемещаем форму
                Location = mousePos; 
            }
        }
 
        private void button5_Click(object sender, EventArgs e)
        {
            Form3 RegForm = new Form3();
            DialogResult regOk = RegForm.ShowDialog();
 
            if (regOk == System.Windows.Forms.DialogResult.OK)
            {
                textBox1.Text = RegForm.TextBox1;
                textBox2.Text = RegForm.TextBox2;
 
                MessageBox.Show("{0}, Ваши регистрационные данные внесены в поля!", RegForm.TextBox4);
            }
        }
 
        // логин и пароль пользователя для входа в программу
        private List<string> GetLoginPass(string login, string password)
        {
            SqlCommand command;
            SqlDataReader dataReader;
 
            List<string> loginPass = new List<string>();
 
            connection.ConnectionString = conString.GetConStringPath();
 
            string queryString = String.Format("SELECT Login, Password FROM Login_Pass WHERE Login='{0}' AND Password='{1}'", login, password);
 
            try
            {
                connection.Open();
                command = new SqlCommand(queryString, connection);
                dataReader = command.ExecuteReader();
 
                while (dataReader.Read())
                {
                    loginPass.Add(dataReader["login"].ToString());
                    loginPass.Add(dataReader["password"].ToString());
                }
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
            finally
            {
                connection.Close();
            }
 
            return loginPass;
        }
 
        // аутентификация в программе
        private void button3_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" && textBox2.Text == "")
            {
                MessageBox.Show("Вы не ввели логин и пароль!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("Вы не ввели логин!");
            }
            else if (textBox2.Text == "")
            {
                MessageBox.Show("Вы не ввели пароль!");
            }
            else
            {
                List<string> loginPass = new List<string>();
 
                string log = textBox1.Text;
                string pass = textBox2.Text;
 
                loginPass = GetLoginPass(log, pass);
 
                if (loginPass.Count == 2)
                {
                    if (textBox1.Text == loginPass[0] && textBox2.Text == loginPass[1])
                    {
                        //MessageBox.Show("аутентификация в программе прошла успешно!");
 
                        login = textBox1.Text;
 
                        DialogResult = System.Windows.Forms.DialogResult.OK;
 
                        MessageBox.Show(login);
                    }
                    else
                    {
                        MessageBox.Show("Не верный логин и пароль!");
 
                        textBox1.Text = "";
                        textBox2.Text = "";
                    }
                }
                else
                {
                    MessageBox.Show("Такого пользователя не существует!");
 
                    textBox1.Text = "";
                    textBox2.Text = "";
                }
            }
        }
    }
форма 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public partial class Form1 : Form
    {
        private SqlConnection connection;
        private GetConString conString;
        private DbDataAdapter dataAdapter;
        private DbConnection conn;
        private Form2 logForm;
        private string userLogin;
 
        public Form1()
        {
            InitializeComponent();
 
            this.MaximizeBox = false;
 
            connection = new SqlConnection();
            conString = new GetConString();
            dataAdapter = new SqlDataAdapter();
            logForm = new Form2();
            conn = new SqlConnection();
 
            userLogin = logForm.Login;
 
            DbCommand select = new SqlCommand();
            conn.ConnectionString = conString.GetConStringPath();
            select.Connection = conn;
            select.CommandText = String.Format
                                 (@"SELECT Websait_Name, URL, Users.[Login], Users.[Password], E_mail
                                    FROM Login_Pass, Users
                                    WHERE Login_Pass.Login='{0}'", userLogin);
 
            dataAdapter.SelectCommand = select;
 
            if (logForm.ShowDialog() == DialogResult.Cancel)
                this.Close();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show(userLogin);
            toolStripStatusLabel1.Alignment = ToolStripItemAlignment.Left;
            toolStripStatusLabel1.Text = DateTime.Now.ToLongDateString();
            toolStripStatusLabel2.Text = DateTime.Now.ToLongTimeString();
            timer1.Enabled = true;
            timer1.Interval = 1000;
 
            try
            {
                dataSet1.Clear();
                dataAdapter.Fill(dataSet1);
                dataGridView1.DataSource = dataSet1.Tables[0];
            }
            catch(Exception error)
            {
                MessageBox.Show(error.Message);
            }
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            toolStripStatusLabel2.Text = DateTime.Now.ToLongTimeString();
        }
}
0
8357 / 4566 / 1787
Регистрация: 11.02.2013
Сообщений: 9,671
19.10.2014, 02:12 4
Коды обеих форм не нужны. Как я и говорил. Поле login принимает значение только при нажатии на кнопку button3 и при выполнении множества условий. Ты же в первой форме только создаёшь экземпляр второй формы, но даже не показываешь её. Как же ты хочешь получить какое-то значение?
0
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
19.10.2014, 02:16  [ТС] 5
и что посоветуете сделать? чтобы логин записывался в переменную и можно его было использовать в первой форме?
0
8357 / 4566 / 1787
Регистрация: 11.02.2013
Сообщений: 9,671
19.10.2014, 02:24 6
посоветую показать вторую форму ShowDialog, внести данные, закрыть форму. Примерно, так:
C#
1
2
3
logForm = new Form2();
if(logForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    userLogin = logForm.Login;
1
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
19.10.2014, 02:29  [ТС] 7
Спасибо большое, разобрался, все работает.
0
3 / 3 / 1
Регистрация: 30.08.2012
Сообщений: 63
19.10.2014, 10:12 8
А почему бы просто конструктор формы не сделать нормальный?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2014, 10:12

Определите время передачи данных
Аня хочет передать Маше фотографии, сделанные на прошедшем празднике. Для этого Аня сначала...

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

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

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

Передача данных между формами
Здравствуйте! Собственно, вычитал в 7ми частых ответах вот такой вариант: Так вот дело в том,...

Передача данных между формами
Такая тема неоднократно подымалась на просторах и-нета, но удовлетворительного для себя ответа я...


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

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

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