最近,看到网上经常会问如何进行窗口跳转,大多数的问题都是牵扯到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 = "";

}

}

C#Winform中的一个登录解说(转载的哟,比较不错)的更多相关文章

  1. 20150216—winform中的DataGridView

    DataGridView的主要作用是用来按列表来显示信息,其信息的数据源可以是SQL数据库,也可以是一个列表式的集合. DataGridView的位置:工具箱--数据--DataGridView.如下 ...

  2. C# MVC 用户登录状态判断 【C#】list 去重(转载) js 日期格式转换(转载) C#日期转换(转载) Nullable<System.DateTime>日期格式转换 (转载) Asp.Net MVC中Action跳转(转载)

    C# MVC 用户登录状态判断   来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ...

  3. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  4. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  5. 转:C4项目中验证用户登录一个特性就搞定

    转:C4项目中验证用户登录一个特性就搞定   在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性.     // 摘要:    //     表示一个特性,该特性用于限制调用 ...

  6. WinForm中一个窗体调用另一个窗体

    [转] WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码) //如果想打开一个 Form2 的窗体类,只需要: Form2 form = new Form2(); //有没有参数得看 ...

  7. winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已解] 望一起讨论)(技术改变世界-cnblog)

    http://www.cnblogs.com/IAmBetter/archive/2012/01/14/2322156.html winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已 ...

  8. eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?

    eclipse 中main()函数中的String[] args如何使用? 右击你的项目,选择run as中选择 run configuration,选择arguments总的program argu ...

  9. Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼

    Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼标签: winform treeview drawnode Treeview控 ...

随机推荐

  1. 页面加速Chromium 预压 Prerendering

    前者已经推出了一个博客prefetch预加载的网页资源,以提高网页加载速度,下面我们一起来看一下,以加速网页chromium prerendering.介绍prerendering之前.先介绍两个概念 ...

  2. seaJs组建库

    seaJs组建库的使用   原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以 ...

  3. 深入了解Libgdx中间Skin分类

    文不是直接翻译.. . 本文在Libgdx的官方wiki的基础上,加上一些自己的理解.所以,难免会一些甚至是非常多的理解非常片面的东西.写的不好,还请见谅.... 事实上 事实上.在LibGDX的官方 ...

  4. SQL Server编程系列(2):SMO常用对象的有关操作

    原文:SQL Server编程系列(2):SMO常用对象的有关操作 在上一篇周公简单讲述了SMO的一些基本概念,实际上SMO体系结构远不止周公在上一篇中讲述的那么简单,下图是MSDN上给出的一个完整的 ...

  5. C# 跨线程呼叫控制

    在C# 应用程序开发, 我们经常要UI作线程分开,防止界面停止响应.  同一时候我们又须要在工作线程中更新UI界面上的控件, 以下介绍几种经常使用的方法 阅读文件夹 线程间操作无效 第一种办法:禁止编 ...

  6. 在VirtualBox安装OS X 10.10

    下面将指导介绍了如何引入自由和强大VirtualBox安装在虚拟机上OS X Yosemite 10.10 法律免责声明:本指南旨在说明如何在定期购买的苹果电脑上创建一个虚拟机执行真正的Mac OS ...

  7. android 卸载程序、清除数据、停止服务用法

    要实现卸载程序.清除数据.停止正在执行的服务这几大模块,如今将代码粗略总结例如以下: 主要运用到的类有 PackageManager ActivityManager ApplicationInfo R ...

  8. vS2010 列表控件 加入右键菜单

    1.首先,就需要信息加入权限控制,例如,下面的对话框弹出 2,例如以下图选择须要的消息响应,这里选择NM_RCLICK 消息. 3,加入例如以下代码 </pre><pre name= ...

  9. Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)

    方法是与某些特定类型相关联的函数.类.结构体.枚举都能够定义实例方法:实例方法为给定类型的实例封装了详细的任务与功能.类.结构体.枚举也能够定义类型方法:类型方法与类型本身相关联.类型方法与 Obje ...

  10. HDU 1385 Minimum Transport Cost 最短路径题解

    本题就是使用Floyd算法求全部路径的最短路径,并且须要保存路径,并且更进一步须要依照字典顺序输出结果. 还是有一定难度的. Floyd有一种非常巧妙的记录数据的方法,大多都是使用这种方法记录数据的. ...