Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
2 / 2 / 0
Регистрация: 26.05.2017
Сообщений: 125

Можно ли как то сделать так, чтобы сначала отображалась форма авторизации?

12.04.2021, 10:10. Показов 5133. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня. Подскажите пожалуйста. Есть приложение написанное ранее мной, однако от меня затребовали чтобы, работа с приложением была по форме авторизации - то есть после ввода логина и пароля, нужно чтобы еще и была связь формы логина и пароля с основной формой. Когда то я сталкивался с таким в делфи, но там нужно было сначала на форме 1 писать авторизацию, а на форме 2 уже программу иначе если сделать программу на форме 1 и просто закрыть авторизацию - программа запускала основную форму. Можно ли как то сделать так, чтобы сначала отображалась форма авторизации, а потом уже при введённых верно данных открывалась основная форма и не переписывать все заново.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2021, 10:10
Ответы с готовыми решениями:

Как сделать так, чтобы форма отображалась на весь экран как в играх
Как сделать так, чтобы форма отображалась на весь экран как в играх?

Как сделать чтобы при последующем открытии форма не отображалась?
Есть документ. При открытии отображается форма для ввода инфы. Как сделать чтобы при последующем открытии форма не отображалась? Знаю...

Как сделать так, чтобы по оси абсцисс отображалась дата
Вопрос в следующем: как сделать так, чтобы по оси (x) отображалась дата, Насколько я понял, надо объявить масси с нужными датами, потом...

38
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
12.04.2021, 10:26
Цитата Сообщение от Daimonos Посмотреть сообщение
Можно ли как то сделать так, чтобы сначала отображалась форма авторизации
Можно. В Main перед запуском основной формы. Примерно так
C#
1
2
3
4
5
6
7
8
9
10
bool auth = false;
using (var authForm = new AuthForm())
{
    auth = authForm.ShowDialog() == DialogResult.OK;
}
 
if (auth)
{
    Application.Run(new MainForm());
}
1
2 / 2 / 0
Регистрация: 26.05.2017
Сообщений: 125
12.04.2021, 10:33  [ТС]
OwenGlendower, То есть я делаю тогда в этом же проекте форму №2 и пишу к ней авторизацию, и у меня тогда будет взаимосвязь на форме 1 с (например ) textboxLogin.text а потом просто в мейн прописываю условие по которому запускается форма 1?
0
36 / 21 / 16
Регистрация: 29.03.2021
Сообщений: 94
12.04.2021, 10:41
OwenGlendover, в чем преимущество вашего подхода? Почему нельзя было сделать так:
C#
1
2
3
4
5
6
static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new FormAuthorization());
        }
и на форме авторизации по нажатию на кнопку ОК, накинуть обработчик, который показывает основную форму и передаёт логин и пароль на неё?
0
2 / 2 / 0
Регистрация: 26.05.2017
Сообщений: 125
12.04.2021, 10:45  [ТС]
Gunner_Shark, тут скорее всего будет такая фигня как с делфи - то есть я закрою (без нажатия кнопки ОК) форму (даже если например убрать у нее в свойствах верхние кнопки закрыть свернуть и тд) если через например диспетчер задач взять убить запущенную форму авторизации может сразу открыться основная...
0
36 / 21 / 16
Регистрация: 29.03.2021
Сообщений: 94
12.04.2021, 10:48
Daimonos, описанную вами ситуацию легко обработать в событии формы FormClosed. Если закрываешь форму авторизации, то приложение завершает работу совсем.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
12.04.2021, 11:03
Цитата Сообщение от Daimonos Посмотреть сообщение
То есть я делаю тогда в этом же проекте форму №2 и пишу к ней авторизацию, и у меня тогда будет взаимосвязь на форме 1 с (например ) textboxLogin.text а потом просто в мейн прописываю условие по которому запускается форма 1?
Основу кода я привел. Передачу информации о пользователе лучше организовать через конструктор формы.

Цитата Сообщение от Gunner_Shark Посмотреть сообщение
Почему нельзя было сделать так:
Так форма авторизации останется висеть в памяти до конца работы приложения. Кроме того это сильно связывает две формы.
0
2 / 2 / 0
Регистрация: 26.05.2017
Сообщений: 125
12.04.2021, 11:17  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Основу кода я привел. Передачу информации о пользователе лучше организовать через конструктор формы.
Ну я думал сделать на форме 1 какой нибудь label1 который будет работать по принципу:

C#
1
2
3
4
5
6
7
8
if (textboxLogin.Text = "ivanov")
{
       label1.Text = "Иванов И.И.";
}
else if (textboxLogin.Text = "sidorov")
{
       label1.Text = "Сидоров А.А.";
}
Добавлено через 4 минуты
То есть сначала оно бы выгружало в какую нить переменную string, а с нее уже проверку дальше и вывод на label1
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
12.04.2021, 11:19
Daimonos, зачем делать хорошо когда можно сделать плохо, да? Сделайте чтобы форма авторизации возвращала вам объект с информацией о пользователе. Именно там должен быть логин и полное имя. Уже заполненные. Далее передайте этот объект в главную форму, через её конструктор. И затем уже делайте с информацией всё что требуется.
0
2 / 2 / 0
Регистрация: 26.05.2017
Сообщений: 125
12.04.2021, 16:54  [ТС]
OwenGlendower, попытался вашим вариантом, так же попытался вариантом предложенным вот здесь
Цитата Сообщение от Gunner_Shark Посмотреть сообщение
C#
1
2
3
4
5
6
static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new FormAuthorization());
        }
однако переменная у меня не переходит с одной формы в другую.

уже вот попробовал даже например так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 public partial class FormAuthorization : Form
    {
        public FormAuthorization()
        {
            Program.yid1 = this;
            InitializeComponent();
        }
 
private void BtnAuth_Click(object sender, EventArgs e)
        {
            
            if (tbLogin.Text == "Admin" && tbPass.Text == "Admin")
            {
                Form1 f1 = new Form1();
                //FormAuthorization f2 = new FormAuthorization();
                this.Hide();
                f1.ShowDialog();
                this.Close();
                labelID.Text = id1;
                labelID2.Text = id2;   
            }
       }
А в форме 1 в свойствах одного из Label
C#
1
2
3
4
5
private void IdName1_TextChanged(object sender, EventArgs e)
        {
            //FormAuthorization fauto = new FormAuthorization();
            idName1.Text = Program.yid1.id1; 
        }
однако данные он не получает(
0
36 / 21 / 16
Регистрация: 29.03.2021
Сообщений: 94
12.04.2021, 17:19
Daimonos, в методе Main вы просто указываете название своей формы авторизации, у меня это FormAuthorization поэтому я так пишу
C#
1
2
3
4
5
static void Main()
        {
            ...
            Application.Run(new FormAuthorization());
        }
вы должны будете указать своё название формы. Потом, при нажатии ОК на форме авторизации вы создаёте объект основной формы и передаёте логин и пароль в конструктор формы, примерно так
C#
1
2
3
4
5
6
private void buttonEnter_Click(object sender, EventArgs e)
        {
         MainForm form = new MainForm(login,password);
         Hide();
         form.ShowDialog();
        }
В классе главной формы необходимо иметь 2 переменные, которые будут хранить логин и пароль, который вы передали в конструктор главной формы.
C#
1
2
3
4
5
6
7
8
9
10
11
12
 public partial class Main : Form
    {
        string login, password;
        //конструктор главной формы
        public Main(string login, string password)
        {
            InitializeComponent();
            this.login = login;
            this.password = password;
        }
        ...
    }
Добавлено через 14 минут
Daimonos, можно сделать через переменные как я показал, можно как человек выше советовал, через объект. Если через объект, то тогда нужно создать класс, который будет описывать пользователя, включая логин и пароль, и уже объект этого класса передавать в конструктор главной формы.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
12.04.2021, 20:17
Daimonos, пример передачи данных между формами вам уже привел Gunner_Shark. Я все еще считаю что вариант с созданием FormAuthorization в методе Main лучше. В нем будет по сути тоже самое, только в FormAuthorization нуджно добавить метод или свойство(а) возвращающей информацию о пользователе. Дальше, как и примере выше, передача в конструктор главной формы с сохранением в экземплярное поле.
0
2 / 2 / 0
Регистрация: 26.05.2017
Сообщений: 125
12.04.2021, 21:01  [ТС]
OwenGlendower, Gunner_Shark, Cпасибо! Буду пробовать. А то я уж думал подключить SQL базу для авторизации. Но как то нецелесообразно - пользователей мало, и приложение не будет работать в сети...
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
12.04.2021, 22:59
Предложу третий вариант:
Вызывать окно авторизации в Load или вообще конструкторе.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
 
            repeate:
 
            using (var authForm = new AuthForm())
            {
                if (authForm.ShowDialog() == DialogResult.OK)
                {
                    if (!_userSource.Any(user => user.Login == authForm.Login && user.Password == authForm.Password))
                    {
                        MessageBox.Show("Неправильный логин или пароль");
                        goto repeate;
                    }
                }
                else
                {
                    Close();
                }
            }
        }
Вложения
Тип файла: zip Nya.CyberForum2812655.zip (153.0 Кб, 9 просмотров)
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
13.04.2021, 08:21
Wolfdp, Неправильный у вас подход, хранить пароль и логин в долгосрочной памяти это плохо, нужно в форме авторизации узнавать авторизировался или нет, а дальше передавать уже статус авторизации либо пакет прав(разрешений)
0
2 / 2 / 0
Регистрация: 26.05.2017
Сообщений: 125
13.04.2021, 08:33  [ТС]
Wolfdp, Ваш проект у меня не компилируется(

Ошибка CS8137 Невозможно определить класс или элемент, использующий кортежи, так как не удалось найти необходимый тип компилятора (System.Runtime.CompilerServices.TupleEl ementNamesAttribute). Отсутствует ссылка?
0
2 / 2 / 0
Регистрация: 26.05.2017
Сообщений: 125
13.04.2021, 16:23  [ТС]
Блин. Уже мозги плавятся с этой авторизацией. функцию входа выполняет, все работает. НО.... Я не могу получить переменные, которые я там объявил для того чтобы их использовать в главной форме.
По сути нужно 3 переменных. Вытащить с одной формы на другую.
C#
1
2
3
public string id1;
public string id2;
public string rank;
Это дело с формы авторизации я пытался при помощи (крайний раз)
C#
1
2
3
4
5
public string TextID1
        {
            get { return id1; }
            set { id1 = value; }
        }
вытащить в главную форму, однако переменная, которая должна принимать значение по какой то причине его не принимает...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public string xid1
...
var auth111 = new FormAuthorization();
auth111.TextID1 = xid1;
...
 
        public void IdName1_TextChanged(object sender, EventArgs e)
        {
            /*if (xid1 != "")
            {
                idName1.Text = "1";
            }
            else { idName1.Text = "0"; }*/
            idName1.Text = xid1;
        }
Так же попробовал через
Program.yid1.id1 = xid1;


Помогите пожалуйста допилить и разобраться почему не получает форма данные

Добавлено через 10 минут
Дополнение. С формы авторизации переменные получают данные следующим образом:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public string admin = "Иванов Иван Иванович";
public string admin1 = "Иванов И.И.";
...
public void BtnAuth_Click(object sender, EventArgs e)
        {
            if (tbLogin.Text == "Admin" && tbPass.Text == "Admin")
            {
                id1 = admin;
                id2 = admin1;
                rank = "Начальник";
                Form1 f1 = new Form1();
                this.Hide();
                f1.ShowDialog();
                this.Close();
            }
0
68 / 56 / 15
Регистрация: 30.01.2020
Сообщений: 332
13.04.2021, 16:38
Daimonos, вам же выше уже предлагали передавать через конструктор
C#
1
2
3
4
5
6
7
8
9
10
11
12
public void BtnAuth_Click(object sender, EventArgs e)
        {
            if (tbLogin.Text == "Admin" && tbPass.Text == "Admin")
            {
                id1 = admin;
                id2 = admin1;
                rank = "Начальник";
                Form1 f1 = new Form1(id1,id2,rank);
                this.Hide();
                f1.ShowDialog();
                this.Close();
            }
Добавлено через 2 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class Form1: Form
    {
        string id1, string id2, string rank
        //конструктор главной формы
        public Form1(string id1, string id2, string rank)
        {
            InitializeComponent();
            this.id1= id1;
            this.id2= id2;
            this.rank= rank;
        }
        ...
    }
Добавлено через 3 минуты
И если f1 это основная форма, то лучше всё-таки f1.Show() а не f1.ShowDialog()
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
13.04.2021, 17:10
Цитата Сообщение от gegbot Посмотреть сообщение
И если f1 это основная форма, то лучше всё-таки f1.Show() а не f1.ShowDialog()
Тогда приложение сразу закроется. Ведь форма авторизации это главная форма.
0
68 / 56 / 15
Регистрация: 30.01.2020
Сообщений: 332
13.04.2021, 17:27
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Тогда приложение сразу закроется.
а ну да, точно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.04.2021, 17:27
Помогаю со студенческими работами здесь

Сделать форму авторизации так, чтобы сначала показало приветствие, а затем показало авторизацию
Не могу сделать форму авторизации так, чтобы сначала показало приветствие, а затем показало авторизацию. Чуть чуть осталось... ...

как сделать так, чтобы галерея хорошо отображалась на мобильных устройствах?
http://evromaster03.ru/gallery.php на нокиа люмиа все время убегает вправо, поставил <meta name="viewport"...

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

Как сделать так чтобы программа при запуске отображалась в системном трэе а не в обычном окне
Здравствуйте , подскажите пожалуйста как можно сделать так чтобы программа при запуске отображалась в системном трэе а не в в окне. Пишу...

Как сделать так, чтобы выпадающее меню в Проводнике отображалась постоянно, а не закрывалось после нажатия?
Приветствую форумчане! В окнах windows (любой) в каждом практически окне есть строка меню (файл, вид...). Нажимаешь на любую кнопку на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru