Как правильно реализовать вход в программу.

Pancheska

Вопрос такой: Есть главная форма(=Form Mdi). Необходимо при запуске программы сначала открывать окно для ввода логина и пароля (я реализовала это через дополнительную форму).
 private void MainForm_Load(object sender, EventArgs e)
        {
            ViewManager.ShowLogInForm();  
            menuStrip1.Enabled = false;          
        }
Я хочу сделать так, что когда у меня открыта LogIn форма - Меню в главной форме (или может быть и вся сама главная форма) должны быть enable=false. Если логин и пароль введены правильно, то при нажатии кнопки ОК форма LogIn закрывается и меню в главной форме становится активным. Помогите, пожалуйста, как это реализовать правильно в коде? Только, пожалуйста, не посылайте меня смотреть форум про 7 частых вопросов по винформам. Я уже смотрела, и не только это - к сожалению, ничего не нашла, чтобы мне помогло. А может быть в принципе есть какой-то другой способ реализовать вход в программу при помощи логина и пароля (не создавая другую форму)? Я с этим столкнулась в первый раз.
7 ответов

Pancheska

Кнопки ОК Cancel Текстовое поле имя PasswordTextBox
    Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
 
        If PasswordTextBox.Text = (3333) Then
            NewForm.Show()
            Me.Close()
        Else
            MsgBox("Пароль не верен")
            PasswordTextBox.Clear()
        End If
    End Sub
Прости не полностью прочитал. Т.е. при загрузке формы выходит например LoginForm1 Там textbox имя PasswordTextBox. В принцепе все то же самое Сразу загружается LoginForm, а главная не активна и если
 Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
 
        If PasswordTextBox.Text = (3333) Then
            Моя_главная_Форма .Show()
            Мое_любимое_меню.Enable = True
            Me.Close()
        Else
            MsgBox("Пароль не верен")
Мое_любимое_меню.Enable = False
'а тут че еще хочешь.
и и т.д. 
        End If
    End Sub
Теперь я так понял?


Pancheska

Я вижу, что это код, написанный на VB.Net? Или не имеет значения в данном случае?И еще что такое в данном случае Sub? Раньше никогда этим не пользовалась.


Pancheska

Pancheska, возможно проще делать главной форме Hide(), показывать логин форму, вводится пароль и если верный - главная форма становится видимой?
Я вижу, что это код, написанный на VB.Net? Или не имеет значения в данном случае?
если проект создан на C# - имеет
И еще что такое в данном случае Sub? Раньше никогда этим не пользовалась.
лучше вам не знать и не пользоватся избыточный синтаксис сильно замедляет разработку


Pancheska

В результате Логин форму я сделала независимой от FormMdi. И открываю ее при помощи ShowDialog, а не Show как было раньше. Тогда не надо блокировать ничего на главной форме, она и так неактивна, до тех пор пока не закроется Логин форма. А закрывается она у меня только при корректном введении пароля и логина. Конечно, это не совсем то, что я хотела. Но такой вариант для проекта тоже приемлемый. Спасибо всем за помощь.


Pancheska

Господа, что бы новую тему не создавать, помогите с похожим вопросом: есть основная форма приложения Form1, есть форма для Логина и Пароля Form2 в main() есть метод Application.Run(new Form2()), запускает приложение и создает экземплял Form2, но как называется этот экземпляр (чтобы например получить значения TextBox'ов)??Если в main() написать
Form2 f2 = new Form2();
Application.Run(f2);
так хотя понятно к чему обращатьсяНа форме2 у меня есть текстбокс и кнопка На форме1 у меня есть лэйбл При запуске приложения должна запуститься форма2, я ввожу значение в текстбокс, нажимаю, кнопку, должна закрыться форма2, открыться форма1 с значением лейбела из текстбокса всё вроди бы простодобавляю в класс Form2 метод и привязываю его к нажатию кнопки
private void NewForm(object sender, EventArgs e)
        {
            
            string txtLabel;
            txtLabel = f2.textBox1.Text.ToString();
            Form1 f1 = new Form1();
            f1.Show();
            f1.label1.Text = txtLabel;
            f2.Close();       
                       
        }
}
При выполнении открывается форма2, ввожу значение в textbox, жму кнопку, открывается форма1, и тут же ошибка NullReferenceException, при рассмотрении видно, что в момент выполнения этого метода f2 уже имеет значение NULL, непонятно почему, помогите плиз...


Pancheska

При выполнении открывается форма2, ввожу значение в textbox, жму кнопку, открывается форма1, и тут же ошибка NullReferenceException, при рассмотрении видно, что в момент выполнения этого метода f2 уже имеет значение NULL, непонятно почему, помогите плиз...
В Form1
Form2 f2 = new Form2();
f2.Owner = this;
Application.Run(f2);
Меняете св-во Modifiers у label1 на publicНа Form2
private void NewForm(object sender, EventArgs e)
        {
            
            string txtLabel;
            txtLabel = f2.textBox1.Text.ToString(); // зачем тут ToString()? Когда значение и так текстовое
            Form1 f1 = (Form1)this.Owner;
            f1.Show();
            f1.label1.Text = txtLabel;
            f2.Close();       
                       
        }
}


Pancheska

Меняете св-во Modifiers у label1 на public
Так конечно можно делать, но не рекомендуется. Такой подход противоречит принципам ООП (инкапсуляции). Lub3r, почитай Ответы на 7 самых частых вопросов по WinForms