C# 登录窗口的设计技巧
记得很久之前要用C#做个需要登录的小东西,自己之前完全没有编写WinForm的经验,整个过程中,自己感觉应该怎么写就怎么写,时常导致许多逻辑性的错误,比如在做这个登录窗口的时候,应该实现的效果是,用户启动程序,首先显示登录窗口,由用户输入用户名和密码等登录信息,然后如果点击登录按钮则验证用户名和密码的正确性,如正确则调出程序主窗口,如果点击取消按钮则关闭程序,自己第一次的时候首先设计了个登录窗口LoginForm,两个按钮CancelButton和OKButton,然后分别添加各自的Click事件,OKButton的Click事件中验证用户信息的正确性,并返回验证结果,如果正确就new一个主窗口MainForm,这个时候程序的主函数Main中要这样写:Application.run(new LoginForm());这样最后导致的结果就是感觉所有的事情都要LoginForm去做,导致它过于臃肿,本来我们的重心应该在MainForm中的;下面的做法就很好的避免了这个逻辑错误;
第一步:设计一个登录窗口LoginForm,内含两个按钮CancelButton和OKButton,还有具体的内容输入框,如textBoxID和textBoxPassword,另设相对应的类成员用来接受输入框中的内容,如UserName和PassWord,只需要添加OKButton的Click事件,如下:
private void OKButton_Click(object sender, EventArgs e)
{
PassWord = textBoxPassword.Text;
UserName = textBoxID.Text;
}
还要在LoginForm.Designer.cs的InitializeComponent方法中添加两者的属性,分别为:
this.OKButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
这样LoginForm就完事了,怎么样,这样的话LoginForm够简洁吧。。。。。
第二步:设计主窗口,这才是我们工作的重心,怎么做看具体情况,这里就不讨论了,这里只说下和上面登录窗口相关联的部分,我们只需要在MainForm的MainForm_Load方法中写下如下代码即可:
private void MainForm_Load(object sender, EventArgs e)
{
LoginForm formLogin = new LoginForm();
if(formLogin.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
{
string userName = formLogin.UserName;
string password = formLogin.PassWord;
formLogin.Dispose();
}
else
{
formLogin.Dispose();
this.Dispose();
}
}
就这样就基本可以了,注意这里是用到了模式化窗口的方法ShowDilog,参数this表示MainForm是LoginForm的父窗口,这里就用到ShowDilog的返回值,就是上面设置的两个按钮的DialogResult属性。
总之,感觉这才是真正的登录类窗口设计的正统方法,我才掌握,真是太羞愧了。
C# 登录窗口的设计技巧的更多相关文章
- C# WPF 建立无边框(标题栏)的登录窗口
前言:笔者最近用c#写WPF做了一个项目,此前未曾做过完整的WPF项目,算是一边学一边用,网上搜了不少资料,效率当然是不敢恭维的,有时会在一些很简单的问题上纠结很长时间,血与泪的教训可不少. 不过,正 ...
- WPF界面设计技巧(11)-认知流文档 & 小议WPF的野心
原文:WPF界面设计技巧(11)-认知流文档 & 小议WPF的野心 流文档是WPF中的一种独特的文档承载格式,它的书写和呈现方式都很像HTML,它也几乎具备了HTML的绝大多数优势,并提供了更 ...
- WPF界面设计技巧(9)—使用UI自动化布局
原文:WPF界面设计技巧(9)-使用UI自动化布局 最近一直没时间更新这系列文章,因为我一直在埋头编写我的第一个WPF应用程序:MailMail 今天开始编写附属的加密/解密工具,对UI自动化布局有些 ...
- WPF界面设计技巧(1)—不规则窗体图文指南
原文:WPF界面设计技巧(1)-不规则窗体图文指南 初到园子,奉上第一篇入门级教程,请勿见笑. 以往WinForm编程中,实现不规则窗体是有一定难度的,更难的是不规则窗体的边缘抗锯齿及局部透明处理.而 ...
- DevExpress Report 其他常用设计技巧
原文:DevExpress Report 其他常用设计技巧 1 设置默认的打印纸张及页边距 选择Report-打开属性窗口,设置默认边距(Margins)和默认纸张(PaperKind). 2 修改R ...
- 【2017-04-24】winform基础、登录窗口、窗口属性
一.winform基础 客户端应用程序:C/S 客户端应用程序可以操作用户电脑中的文件,代码要在用户电脑上执行,吃用户电脑配置. 窗体是由控件和属性做出来的 控件:窗体里所放的东西."视图 ...
- 项目管理理论与实践(6)——利用Excel制作项目文档的设计技巧
这篇是使用的Excel 2007 进行文档设计,Excel的设计也是一门学问,这里主要介绍一些Excel的设计技巧,后面也会陆续更新该文章. 1. 固定某行某列 首先设计这样的任务管理文档: 现在我想 ...
- class13and14and15_登录窗口
最终的运行效果图(程序见序号6.2): #!/usr/bin/env python# -*- coding:utf-8 -*-# ----------------------------------- ...
- .NET框架设计(常被忽视的C#设计技巧)
阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...
随机推荐
- 开源http协议库curl和wget的区别和使用
curl和wget基础功能有诸多重叠,如下载等. 在高级用途上的curl由于可自定义各种请求参数所以长于模拟web请求,用于测试网页交互(浏览器):wget由于支持ftp和Recursive所以长于下 ...
- defaultdict - update - pymysql
defaultdict 的例子 使用list作为default_factory,他很容易的将一个以键值形式表现的序列分组成一个字典列表 >>> s = [('yellow', 1), ...
- Alamofire请求网络
HTTP - GET和POST请求- 如果要传递大量数据,比如文件上传,只能用POST请求- GET的安全性比POST要差些,如果包含机密/敏感信息,建议用POST- 如果仅仅是索取数据(数据查询), ...
- Scala--操作符
一.标识符 二.中置操作符 中置表达式,操作符位于两个参数之间 1 to 10 1.to(10) 1 -> 10 1.->(10) 三.一元操作符 a.标识符() 1 toString 1 ...
- How develop BigData Project in Visual Studio
- JSON传输数组的基本操作
目标JSON结果如下: 生成JSON的的过程如下: Document document; Document::AllocatorType& allocator = document.GetAl ...
- StringUtils类方法归纳
StringUtils方法概览 IsEmpty/IsBlank - checks if a String contains text IsEmpty/IsBlank – 检查字符串是否有内容. Tri ...
- JS关闭窗口而不提示
使用js关闭窗口而不提示代码: window.opener = null; window.open( '', '_self' ); window.close();
- idea Cannot Resolve Symbol 问题解决
总结:要多根据有问题的提示来进行百度搜索,这一次我就是搜索了 idea 提示的错误信息 Cannot Resolve Symbol ,才找到的解决方案,所以说出现问题,如果不是很复杂的场景或者原因很多 ...
- JAVA 文件读取写入后 md5值不变的方法
假如我们想把某文件读入 StringBuffer 并写入新文件,新文件md5值需要保持不变(写入新文件后保证和源文件一模一样), 我们就需要在操作 StringBuffer 时附加换行符: Strin ...