Rox*_*Pro 0 c# authentication wpf
我正在尝试在我的应用程序中创建登录窗口,我对 WPF 还很陌生,这对我来说不太顺利。
这就是我所做的,我什至不确定这是正确的方法,但无论如何我的问题是在代码注释中描述的。
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Window_LogInScreen loginScreen = new Window_LogInScreen();
loginScreen.ShowDialog();
if (loginScreen.DialogResult == true)
{
MessageBox.Show("login success I should keep executing my application.."); // how could I continue my application if this condition is allright?
}
else
{
MessageBox.Show("login failed"); //how could I stop my application if I reach this code, and how to stay on LogIn_Screen form so user can enter password again..
}
lblDate.Text = DateTime.Now.Date.ToString("MM/dd/yyyy");
lblTime.Text = DateTime.Now.ToString("HH:mm:ss");
}
}
Run Code Online (Sandbox Code Playgroud)
我的 Window_LogInScreen :
public partial class Window_LogInScreen : Window
{
public Window_LogInScreen()
{
InitializeComponent();
lblPasswordBox.Focus();
}
private void Window_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
if (lblPasswordBox.Password == "1")//lets say pw is "1" for testing purposes
{
this.DialogResult = true;
this.Close();
}
else
this.DialogResult = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么伙计们,我怎样才能实现这一目标呢?
在窗口窗体中,我会这样做是 Program.cs,但在 WPF 中我不知何故迷失了,我不知道如何以正确的方式实现这一点,
但我的逻辑是:
1)在应用程序运行之前打开登录屏幕,当用户按键盘上的 Enter 时检查密码,如果密码正确则将 DialogResult 设置为 true,
2)返回
MainWindow,检查是否有DialogResult==true,如果有,则继续执行MainWindow,否则,停止应用程序并继续,LogIn_Screen以便用户可以再次输入密码。
谢谢各位,干杯
Xioy312 回答后编辑:
@Xiaoy312你发布的代码真的很棒,我对这段代码很感兴趣,但对我来说看起来有点难以理解。
让我们回到你的第一次编辑,
if (e.Key == Key.Enter && lblPasswordBox.Password == "1")
{
this.DialogResult = true;
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
this.DialogResult如果条件不满足,为什么不会变成 false?因为使用您在上次编辑之前在答案中发布的代码, MessageBox.Show("login failed");fromApplication_Startup永远不会到达,我想知道为什么?if (e.Key == Key.Enter && lblPasswordBox.Password == "1")我想如果不满足提到的条件( ),那么 DialogResult 将是 false 并且MessageBox.Show("login failed");
会调用其他部分?但实际上这不是真的,因为在这里我们的失败尝试是沉默的,我想知道为什么?
而且,应用程序为什么会以这种行为退出?你能解释一下后面发生的事情吗?据我所知,你正在为 DialogResult 赋值,以防它是“1”..?
#region Behavior 1: Exit the application on invalid password
this.DialogResult = lblPasswordBox.Password == "1";
this.Close();
#endregion
Run Code Online (Sandbox Code Playgroud)
您能稍微解释一下这段代码吗,我将非常感激!
如果您想要将用户锁定在应用程序之外,除非他们经过身份验证,您可以定义启动例程而不是MainWindow直接打开。
在 中App.xaml,删除该StartupUri属性并添加这两个属性:
<Application x:Class="WpfApplication1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup"
ShutdownMode="OnExplicitShutdown">
</Application>
Run Code Online (Sandbox Code Playgroud)
OnExplicitShutdown是为了防止应用程序在完成登录窗口后关闭。
在 中App.xaml.cs,您应该找到事件处理程序Application_Startup,您可以在其中指示应用程序的流程:
private void Application_Startup(object sender, StartupEventArgs e)
{
try
{
if (new LoginWindow().ShowDialog() == true)
{
MessageBox.Show("login success I should keep executing my application..");
new MainWindow().ShowDialog();
}
else
{
MessageBox.Show("login failed");
}
}
finally
{
Shutdown();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:登录逻辑应包含在 中LoginWindow,并且不应泄漏到Application或 中MainWindow:
private void Window_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
// lets say pw is "1" for testing purposes
if (e.Key == Key.Enter && lblPasswordBox.Password == "1")
{
this.DialogResult = true;
this.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果您不希望无效密码默默失败,您可以在以下位置更改此行为PreviewKeyDown:
private void LoginWindow_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
// You should keep only one of two:
#region Behavior 1: Exit the application on invalid password
this.DialogResult = lblPasswordBox.Password == "1";
this.Close();
#endregion
#region Behavior 2: Warn the user on invalid password
if (lblPasswordBox.Password == "1")
{
this.DialogResult = true;
this.Close();
}
else
{
MessageBox.Show("invalid password");
}
#endregion
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12259 次 |
| 最近记录: |