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

时间:2010-01-05 23:23:59

标签: winforms

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

  • 我有一个包含登录字段和按钮的表单
  • 成功登录后,我想提供应用程序的主要功能。
  • 目前我正在使用两种形式 - 一种用于登录(form1),另一种用于主要功能(form2) - 当我在它们之间切换时,使form2可见并且form1不可见。

我确信我应该在单一表格上做所有事情。这样做的正常/最佳方法是什么?

谢谢, 理查德。

3 个答案:

答案 0 :(得分:3)

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

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

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

为此,您需要

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

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

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

MainForm中的代码:

    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
    }

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

使用两个按钮“Accept”/“Cancel”创建一个公开用户名/密码字段的表单。

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

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中,您需要从登录按钮的LoginAttempt(string, string)事件中调用OnClick,然后可以根据需要将其放入后台线程中。登录尝试成功后,您可以调用Close方法。

在您的模型中,您还需要一个事件来告诉呼叫者成功失败。

如果你看一下深夜项目,可以通过重新打开一个类似于我在演示棱镜(CWPF Samples)的示例应用程序中使用的方法来实现另一种方法。