Winforms-将表单内容从一个上下文更改为另一个上下文

Winforms-将表单内容从一个上下文更改为另一个上下文,winforms,Winforms,我是一名ASP.NET开发人员,被分配了一个小型Winforms应用程序任务。我正在做以下工作: 我有一个带有登录字段和按钮的表单 成功登录后,我想提供应用程序的主要功能 目前,我正在使用两个表单——一个用于登录(form1),另一个用于主功能(form2)——当我在它们之间交换时,使form2可见,而form1不可见 我觉得我应该在一张表格上做所有的事情。进行此操作的正常/最佳方法是什么 谢谢, Richard。嗯,我不会在一个表单上这样做,但是你可以让你的登录对话框成为主应用程序对话框的

我是一名ASP.NET开发人员,被分配了一个小型Winforms应用程序任务。我正在做以下工作:

  • 我有一个带有登录字段和按钮的表单
  • 成功登录后,我想提供应用程序的主要功能
  • 目前,我正在使用两个表单——一个用于登录(form1),另一个用于主功能(form2)——当我在它们之间交换时,使form2可见,而form1不可见
我觉得我应该在一张表格上做所有的事情。进行此操作的正常/最佳方法是什么

谢谢,
Richard。

嗯,我不会在一个表单上这样做,但是你可以让你的登录对话框成为主应用程序对话框的模式对话框。当用户单击login时,您可以关闭对话框


当用户注销时再次调用它。

IMHO,我不会在一个表单上执行此操作,但您可以将登录对话框设置为主应用程序对话框的模式对话框。当用户单击login时,您可以关闭对话框


当用户注销时,请再次调用它。

一个表单是最好的选择,一旦成功,程序就可以继续下一个表单

创建一个表单,用两个按钮“接受”/“取消”显示用户名/密码字段

创建一个处理登录尝试和成功行为的模型类

public class LoginModel {

    private LoginForm view;
    public LoginModel() {
        view = new LoginForm(this);
    }

    public void Show() {
        view.Show();
    }

    public bool LoginAttempt(string user, string pass) {
        // Process login attempt (call LDAP backend etc...).
    }

}
在LoginForm中,您需要从登录按钮的
OnClick
事件调用
LoginAttent(string,string)
,如果您愿意,可以将其放入后台线程。登录尝试成功后,您可以调用
Close
方法

在您的模型中,您还需要一个事件来告诉调用者成功与否


另一种方法是重新打开一个表单,类似于我在演示prism()的示例应用程序中使用的方法,如果您查看深夜项目的话。

一个表单是可行的,一旦成功,程序就可以继续下一个表单

创建一个表单,用两个按钮“接受”/“取消”显示用户名/密码字段

创建一个处理登录尝试和成功行为的模型类

public class LoginModel {

    private LoginForm view;
    public LoginModel() {
        view = new LoginForm(this);
    }

    public void Show() {
        view.Show();
    }

    public bool LoginAttempt(string user, string pass) {
        // Process login attempt (call LDAP backend etc...).
    }

}
在LoginForm中,您需要从登录按钮的
OnClick
事件调用
LoginAttent(string,string)
,如果您愿意,可以将其放入后台线程。登录尝试成功后,您可以调用
Close
方法

在您的模型中,您还需要一个事件来告诉调用者成功与否


如果您查看深夜项目,可以通过重新打开一个类似于我在演示prism()的示例应用程序中使用的方法的表单来实现另一种方法。

我认为Windows世界中最常见的方法是使用两个对话框。例如,登录Skype、Steam、远程桌面、SQL server(使用SQL Management Studio)等

Windows用户也习惯了登录对话框的常见行为(这里我的意思是单击“取消”按钮将关闭应用程序),并且没有像应用程序的主菜单或其他控件那样的干扰

我建议在主窗体的FormLoad事件中显示登录窗体。使用ShowDialog方法并检查返回值以确定登录表单是否已成功关闭

要想让它发挥作用,你需要

  • 在“确定”按钮的单击处理程序中,将LoginForm.DialogResult属性设置为DialogResult.Ok(或使用对象检查器直接在“确定”按钮上设置DialogResult属性)

  • 使用对象检查器将取消按钮的DialogResult设置为DialogResult。取消

  • 使用对象检查器将LoginForm的AcceptButton和CancelButton属性设置为相应的按钮

主窗体中的代码:

    private void MainForm_Load(object sender, EventArgs e)
    {           
        LoginForm login = new LoginForm();
        login.ShowDialog(this);

        if (login.DialogResult != DialogResult.OK)
        {
            Close();
        }
        else
        {
           // Init your application ...
        }
    }

LoginForm中的代码:

    private void btnOk_Click(object sender, EventArgs e)
    {           
        if (DoSomeLoginLogic())
            DialogResult = DialogResult.OK; // setting this will close the form
    }

我认为Windows世界中最常见的方法是使用两个对话框。例如,登录Skype、Steam、远程桌面、SQL server(使用SQL Management Studio)等

Windows用户也习惯了登录对话框的常见行为(这里我的意思是单击“取消”按钮将关闭应用程序),并且没有像应用程序的主菜单或其他控件那样的干扰

我建议在主窗体的FormLoad事件中显示登录窗体。使用ShowDialog方法并检查返回值以确定登录表单是否已成功关闭

要想让它发挥作用,你需要

  • 在“确定”按钮的单击处理程序中,将LoginForm.DialogResult属性设置为DialogResult.Ok(或使用对象检查器直接在“确定”按钮上设置DialogResult属性)

  • 使用对象检查器将取消按钮的DialogResult设置为DialogResult。取消

  • 使用对象检查器将LoginForm的AcceptButton和CancelButton属性设置为相应的按钮

主窗体中的代码:

    private void MainForm_Load(object sender, EventArgs e)
    {           
        LoginForm login = new LoginForm();
        login.ShowDialog(this);

        if (login.DialogResult != DialogResult.OK)
        {
            Close();
        }
        else
        {
           // Init your application ...
        }
    }

LoginForm中的代码:

    private void btnOk_Click(object sender, EventArgs e)
    {           
        if (DoSomeLoginLogic())
            DialogResult = DialogResult.OK; // setting this will close the form
    }

WF应用程序不需要登录,Windows已经这样做了。需要登录,因为我没有使用Windows身份验证。WF应用程序不需要登录,Windows已经这样做了。因为我没有使用Windows身份验证,所以需要登录。我建议使用单一表单的原因是,如果用户甚至无法登录,应用程序不必加载与主表单关联的所有资源。它还可以更快地打开登录表单。嗨,布雷特,我不确定我是否理解。作为单一表单,我理解一个表单上有两个面板。第一个面板包含登录输入,第二个面板包含应用程序的其余部分。启动时,登录面板可见,但不可见。成功登录后,可见性将交换。我建议使用单一表单的原因是,如果用户甚至无法登录,应用程序就不必加载与主表单关联的所有资源。它还可以更快地打开登录表单。嗨,布雷特,我不确定我是否理解。作为单一表单,我理解一个表单上有两个面板。第一小组