• WinFrom 经典登录窗体(转)


    http://blog.csdn.net/knight94/article/details/652394

    最近,看到网上经常会问如何进行窗口跳转,大多数的问题都是牵扯到Login窗口。其实,在Visual Studio 6以来,比较正确的做法,是判断Login窗口的返回值,然后决定是否打开主窗体,那么在C#中也是一样的。

    具体做法如下:

    首先,创建Login窗口,然后添加相应的输入框和按钮,设置窗口的AcceptButton为窗体的确认按钮,而CancelButton为窗体的取消按钮。例如:

    this.AcceptButton = this.btnOK;

    this.CancelButton = this.btnCancel;

    定义确定按钮以及取消按钮事件,如下:

    private void btnOK_Click(object sender, System.EventArgs e)

    {

    // Here is to use fixed username and password

    // You can check username and password from DB

    if( txtUserName.Text == "Admin" && txtPassword.Text == "nopassword" )

    {

    // Save login user info

    uiLogin.UserName = txtUserName.Text;

    uiLogin.Password = txtPassword.Text;

    // Set dialog result with OK

     

    this.DialogResult = DialogResult.OK;

    }

    else

    {

    // Wrong username or password

     

    nLoginCount++;

    if( nLoginCount == MAX_LOGIN_COUNT )

    // Over 3 times

     

    this.DialogResult = DialogResult.Cancel;

    else

    {

    MessageBox.Show( "Invalid user name and password!" );

    txtUserName.Focus();

    }

    }

    }

    private void btnCancel_Click(object sender, System.EventArgs e)

    {

    // Set dialog result with Cancel

     

    this.DialogResult = DialogResult.Cancel;

    }

    然后,在Login窗体的Closing事件中,要进行处理,如下:

    private void frmLogin_Closing(object sender, System.ComponentModel.CancelEventArgs e)

    {

    // Check whether form is closed with dialog result

     

    if( this.DialogResult != DialogResult.Cancel &&

    this.DialogResult != DialogResult.OK )

    e.Cancel = true;

    }

    除此外,Login窗体一些辅助代码如下:

    private int nLoginCount = 0;

    private const int MAX_LOGIN_COUNT = 3;

    private UserInfo uiLogin;

    public frmLogin( ref UserInfo ui )

    {

    //

    // Required for Windows Form Designer support

    //

    InitializeComponent();

    // Set login info to class member

    uiLogin = ui;

    }

    调用的时候,要修改程序的Main函数,如下:

    /// <summary>

    /// The main entry point for the application.

    /// </summary>

    [STAThread]

    static void Main()

    {

    UserInfo ui = new UserInfo();

    frmLogin myLogin = new frmLogin( ref ui );

    if( myLogin.ShowDialog() == DialogResult.OK )

    {

    //Open your main form here

    MessageBox.Show( "Logged in successfully!" );

    }

    else

    {

    MessageBox.Show( "Failed to logged in!" );

    }

    }

    而附加的UserInfo类如下:

    /// <summary>

    /// User info class

    /// </summary>

    public class UserInfo

    {

    private string strUserName;

    private string strPassword;

    public string UserName

    {

    get{ return strUserName;}

    set{ strUserName = value; }

    }

    public string Password

    {

    get{ return strPassword;}

    set{ strPassword = value;}

    }

    public UserInfo()

    {

    strUserName = "";

    strPassword = "";

    }

    }

  • 相关阅读:
    vue-router 子路由时,父级component设置
    解决vscode运行yarn提示错误
    Can't resolve 'readable-stream/transform.js' in
    mongoose聚合——$group
    mongoose聚合——$project
    ubuntu在apt update时出现错误: http://xx/ubuntu bionic InRelease 无法解析域名“xxx”
    使用ElasticSearch问题记录
    Err:1 http://mirrors.aliyun.com/ubuntu xenial InRelease Temporary failure ...问题及踩到的坑
    mongoose-exists检查一个数组的元素是否在集合中已存在
    jQuery插件开发之datalist
  • 原文地址:https://www.cnblogs.com/quietwalk/p/2446793.html
Copyright © 2020-2023  润新知