【问题标题】:Triggering method dependent on action on second window触发方法取决于第二个窗口上的操作
【发布时间】:2011-12-19 16:31:40
【问题描述】:

请有人告诉我将使用的技术,用于以下场景。

在允许我的代码执行其他操作之前,我想对用户进行身份验证。

我有一个方法可以打开一个包含我的身份验证表单(用户名和密码)的新窗口。

    private bool userLogin()
    {
        Window loginInterface = new Window()
        {
            Title = "Please Login",
            Content = new login(),
            Height = 282,
            Width = 300,
            ResizeMode = ResizeMode.NoResize,
            WindowStartupLocation = WindowStartupLocation.CenterOwner

        };

        loginInterface.Owner = this;

        loginInterface.ShowDialog();

        return true;

    }

我这样调用这个方法,点击按钮:

    private void perform_action(object sender, RoutedEventArgs e)
    {
        if (!userLogin())
        {
            // Failed login, do nothing
        }
        else
        {
            // Authentication successful, perform action
            delete_item();
        }
    }

窗口可以正常打开,但是我现在如何让我的方法根据用户在打开的表单上执行的操作返回 true 或 false?

因此,当用户单击名为 login_button 的登录按钮时,我的代码已经验证了凭据,但我需要发回“布尔”值。

我可以让我的第一个窗口几乎等待在另一个窗口上执行操作并获得响应吗?

【问题讨论】:

    标签: c# wpf methods window


    【解决方案1】:

    Window.ShowDialog() 方法实际上已经返回了一个bool?。这可以通过设置(例如)this.DialogResult = trueWindow 内的任何位置进行设置。然后您可以关闭窗口并从调用代码中访问该值。

    用结果关闭窗口:

    this.DialogResult = true;
    

    ...然后在调用代码中使用该结果:

    var myWindow = /*create window*/;
    var result = myWindow.ShowDialog();
    if (result == true)
    {
         //...
    }
    

    【讨论】:

    • 1. Close 不是必需的 2. result 可以为空,因此该语句不会像这样工作
    • 谢谢你!起初我遇到了麻烦,因为我将 Window 设置为 UserControl。一旦我改变了它,我就可以访问 DialogResult 变量。
    【解决方案2】:

    userLogin 应该返回非真值。

    我会做这样的事情(基于显示的代码):

    return loginInterface.WasSuccessful;  // you'd have to add this property
    

    【讨论】:

      【解决方案3】:

      要关闭登录屏幕,您可以将DialogResult 设置为true 或false,ShowDialog 返回此值。对于其他内容,您可以在第二个窗口创建events 并在第一个窗口订阅它们。

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 2021-04-09
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多