0 / 0 / 0
Регистрация: 12.05.2014
Сообщений: 21
1

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

21.01.2020, 15:06. Показов 2475. Ответов 4
Метки нет (Все метки)

В общем есть 3 формы:
-авторизация
-меню
-теория

с начало пользователь авторизуется и если он ввел пароль администратора то появляется кнопка с настройками в форме теория.
загвоздка в том что кнопка не как не реагирует на скрытие. кто чем сможет помочь?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2020, 15:06
Ответы с готовыми решениями:

Передать значение из txtBox одной формы в переменную другой
Всем привет! Объясните, пожалуйста, как из одной формы Form2 textBox1 передать значения в Form1...

Как передать данные из одной формы другой, если формы вызываються через MDI форму?
Я создал MDI форму для которой добавил две toolstrip button вызывающие форму1 и форму2 внутри MDI...

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

Как передать данные с одной формы на страницу с другой формой?
Есть страница с формой заказа там есть номер телефона, как передать номер телефона на страницу с...

4
547 / 478 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
21.01.2020, 16:56 2
McVIKING, Что-то написано, может кто поймет. А тема: передать значение с формы на форму. Так напишите, что за значение,где оно и т.д.
0
2 / 1 / 1
Регистрация: 21.01.2020
Сообщений: 65
21.01.2020, 17:15 3
К сожалению сложно понять в чём конкретно проблема! Если я правильно понял, то в обработчике кнопки есть обращение к базе получение информации и получение роли пользователя. В таком случае, я бы не стал ломать принципы ООП и просто в конструктор формы закинул бы свой параметр "роль" и при сборке формы выводил нужную информацию. Если от роли зависит какую форму открыть, то путь кнопка и решит какую форму открыть.

Код бы увидеть)
Возможно проблема в получении информации из бд.
0
0 / 0 / 0
Регистрация: 12.05.2014
Сообщений: 21
21.01.2020, 17:58  [ТС] 4
В принципе в коде нечего сверхъестественного нет. Идет подключение к базе Access и потом проверяется введенные пользователем данные



Добавлено через 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
            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb");
            con.Open();
            OleDbDataAdapter ada = new OleDbDataAdapter("SELECT COUNT(*) FROM Persen where login = '" + textBox1.Text + "'and 
            password = '" + textBox2.Text + "'", con);
            DataTable dt = new DataTable();
            OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM Persen where id=1 and login = '" + 
            textBox1.Text + "'and password = '" + textBox2.Text + "'", con);
             ada.Fill(dt);
            
            string text;
            text = command.ExecuteScalar().ToString();
 
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                if (dt.Rows[0][0].ToString() == "1")
                {
                    if (text == "1")
                    {
                        Teoriy frms = new Teoriy();
                        frms.setingButton.Visible = true; //frms это форма с теорией 
                        
                    }
                    else
                    {
 
                        Teoriy frms = new Teoriy();
                        frms.setingButton.Visible = false;
                       
                        
                    }
                    Hide();
                    FormMenu frm = new FormMenu();
                    frm.Show();
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Неправильный логин или пароль!!!");
                }
                con.Close();
            }
            else
                MessageBox.Show("Не введен логин либо пароль!!!");
        }
0
2 / 1 / 1
Регистрация: 21.01.2020
Сообщений: 65
22.01.2020, 21:18 5
Лучший ответ Сообщение было отмечено McVIKING как решение

Решение

Код странный!
Лучше пытаться из бд достать значения соответствующие значению в TextBox'е, но можно и так.

Надо создать отдельно форму в проекте и в её конструкторе дописать параметры, что хочешь передать.

C#
1
2
3
4
5
6
7
8
9
10
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()  // это конструктор формы Form1
        {
            InitializeComponent();
        }
    }
}
Можно сделать так, сделать приватную переменную и передавать значение в неё.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private string role;        //  переменная для работы внутри формы
 
        public Form1(string role)   //  это конструктор формы Form1 принимающий параметр типа string 
        {
            InitializeComponent();
 
            this.role = role;
        }
    }
}
Есть такой вариант, мало удобный, как только ты закроешь форму (не скроешь) этот параметр пропадёт.
C#
1
2
3
4
5
6
7
8
9
10
11
12
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public string Role;        //  переменная для работы внутри формы и вне формы тоже
 
        public Form1()   //  это конструктор формы Form1 принимающий параметр типа string 
        {
            InitializeComponent();
        }
    }
}
Ещё вариант сделать отдельный класс для хранения данных о пользователе, сильно захламляет память, но имеет право на существование.
C#
1
2
3
4
5
6
7
namespace WindowsFormsApp1
{
    public static class Constants
    {
        public static string Role;
    }
}
Чтобы обратиться к такой переменной нужно писать Constants.Role (<название_класса>.<название_переменной>)

Я топлю за первый вариант, главная форма всегда будет в памяти, иначе приложение закончит свою работу, можно сделать публичным сам textbox, но это снова забьёт память. Можно сделать переменную public string <название_переменной> и обращаться <название_формы>.<название_переменной>

Добавлено через 44 минуты
Цитата Сообщение от McVIKING Посмотреть сообщение
В принципе в коде нечего сверхъестественного нет. Идет подключение к базе Access и потом проверяется введенные пользователем данные



Добавлено через 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
            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb");
            con.Open();
            OleDbDataAdapter ada = new OleDbDataAdapter("SELECT COUNT(*) FROM Persen where login = '" + textBox1.Text + "'and 
            password = '" + textBox2.Text + "'", con);
            DataTable dt = new DataTable();
            OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM Persen where id=1 and login = '" + 
            textBox1.Text + "'and password = '" + textBox2.Text + "'", con);
             ada.Fill(dt);
            
            string text;
            text = command.ExecuteScalar().ToString();
 
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                if (dt.Rows[0][0].ToString() == "1")
                {
                    if (text == "1")
                    {
                        Teoriy frms = new Teoriy();
                        frms.setingButton.Visible = true; //frms это форма с теорией 
                        
                    }
                    else
                    {
 
                        Teoriy frms = new Teoriy();
                        frms.setingButton.Visible = false;
                       
                        
                    }
                    Hide();
                    FormMenu frm = new FormMenu();
                    frm.Show();
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Неправильный логин или пароль!!!");
                }
                con.Close();
            }
            else
                MessageBox.Show("Не введен логин либо пароль!!!");
        }
Цитата Сообщение от furrycat Посмотреть сообщение
Код странный!
Я бы делал обращения к базе иначе. Я бы брал из базы всю информацию о пользователе (можно ограничится только ролью в таком случае) и проверять совпадение логина и пароля. Количество строк мне ничего не даст. Именно этим и странен код.

C#
1
OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM Persen where id=1 and login = '" + textBox1.Text + "'and password = '" + textBox2.Text + "'", con);
Я бы написал так:
C#
1
OleDbCommand command = new OleDbCommand(string.Format("SELECT * FROM Persen where login = '{0}' and password = '{1}', textBox1.Text, textBox2.Text), con);
А потом листал бы полученные значения и действовал исходя из них.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2020, 21:18
Помогаю со студенческими работами здесь

Как передать значение из одной статичной функции другой
Есть две статичные функции, мне нужно передать значение переменной из одной функции другой функции...

Передать bitmap из одной формы, изменить его в другой и вернуть обратно. как?
public Create(Bitmap bmp) { InitializeComponent(); ...

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru