Вопрос по c#, .net – Как создать диалог входа в Winform и продолжать цикл
Создание формы входа, которая затем перейдет к основной форме, если учетные данные верны. Вот основной псевдокод:
ShowLoginForm()
if (DialogResult == OK)
CheckCredentials();
if (credentials == VALID)
ShowMainForm();
else
LoopBackAndShowLoginFormAgain(); //repeat process...
else
CloseLoginForm();
Тем не менее, я относительно новичок в WinForms и все еще выясняю это. Я пытаюсь решить, куда поместить мой цикл (Main () или где-нибудь в LoginForm). Где я должен сделать проверку для учетных данных? Это то, что я до сих пор:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LoginForm loginForm = new LoginForm();
if (loginForm.ShowDialog() == DialogResult.OK)
{
Application.Run(new AutoSignerForm());
}
}
Я не хочу выходить из системы и открывать форму входа в систему несколько раз (здесь нужна некоторая эффективность, поэтому я хочу использовать тот же диалог входа в систему). Любые указатели, советы или идеи?
Как насчет того, чтобы установить для DialogResult значение None в обработчике события SubmitButton? Что-то вроде:
private void loginButton_Click(object sender, EventArgs e)
{
if (isValidCredentials())
DialogResult = DialogResult.OK;
else
{
MessageBox.Show("Failed to login or some other error");
DialogResult = DialogResult.None;
}
}
if (isValidCredentials()) { DialogResult = DialogResult.OK; Close() } else { messageLabel.Visible = true; firstTextBox.Focus(); }
, Во втором случае диалог не требуется, так как форма диалога остается открытой. Только вcancelButton_Click
делатьDialogResult = DialogResult.Cancel; Close();
Попробуй это
LoginForm loginForm = new LoginForm();
do {
if (loginForm.ShowDialog() == DialogResult.Cancel) {
return; // Ends application
}
} while (CheckCredentials() != VALID)
Application.Run(new AutoSignerForm());
Cancel
, Это вообще не требует оператора цикла C # и позволяет показать дополнительное сообщение (например, сделав видимую невидимую метку), если, например, учетные данные недействительны.
Я бы сделал следующее:
in Program.cs show the loginForm as a dialog
LoginForm login_form = new LoginForm(); if(login_form.ShowDialog() == DialogResult.OK) { Application.Run(new MainForm()); }
in LoginDialog, handle the click event on "Login" button (or whatever is named)
// replace with the actual login if(textBoxUsername.Text == "my user" && textBoxPassword.Text == "my pass") { // save the user has logged in somewhere // set the dialog result to ok this.DialogResult = DialogResult.OK; // close the dialog this.Close(); } else { // login failed MessageBox.show("Login failed"); // do not close the window }
Теперь вы будете отображать LoginDialog до тех пор, пока пользователь не введет действительные учетные данные или не прекратит попытки, и приложение не закроется. Таким образом, у вас будет только один экземпляр LoginForm, и это будет приятным для пользователя. Кроме того, вы можете быть уверены, что MainForm не инициализируется и отображается без успешного входа пользователя.
почему бы не создать основную форму, а затем показать модальный диалог входа в систему. Тогда вы можете проверить, что делать.