Winform的登录窗体设计思路

其实这种登录窗体的设计有很多种模式。而且实现起来都很简单,我简单列举两种方式

这里的方法都涉及到了多窗体传递数据的问题,请参考我以前的一篇文章《多窗体传递数据》 http://www.cnblogs.com/voodooq/archive/2004/06/14/15446.aspx

1、Main窗体为登录窗体模式。

这种模式应该是比较方便而且简单的一种实现方法,

描述:
在Main窗体中建立登录信息等内容,然后点击登录按钮后在本窗体进行验证,当符合条件的时候,隐藏本窗体而显示功能窗体。

相关代码:
None.gif // 直截取了一段,用于判断的部分,大家可以看到在这里启动了应用。
None.gif

ContractedBlock.gifExpandedBlockStart.gif        
应用程序的主入口点 #region 应用程序的主入口点
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 应用程序的主入口点。
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        [STAThread]
InBlock.gif        
static void Main() 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Application.Run(
new LogonFrm());
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif        
#endregion

ContractedBlock.gifExpandedBlockStart.gif        
Event #region Event
InBlock.gif        
private void btnOk_Click(object sender, System.EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if(this.txtUserId.Text!=""&&this.txtPwd.Text!="")
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
this.User=this.txtUserId.Text.Trim();
InBlock.gif                
this.sPwd=this.txtPwd.Text.Trim();
InBlock.gif                MainFrm main
=new MainFrm(this.User,this.sPwd);//实例化窗体并传递参数
InBlock.gif                
this.Visible=false;
InBlock.gif                main.Show();
ExpandedSubBlockEnd.gif            }

InBlock.gif            
else
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                MessageBox.Show(
"用户名和密码不能为空!");
InBlock.gif                
this.txtUserId.Text="";
InBlock.gif                
this.txtPwd.Text="";
InBlock.gif                
this.txtUserId.Focus();
InBlock.gif                
return;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private void btnCancel_Click(object sender, System.EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Application.Exit();
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif        
#endregion

2、弹出登录窗体模式

这种登录当时相对上面一种稍微复杂一点,需要使用多窗体数据传递的方法。

描述:
这里,将Main窗体作为登录后的处理窗体,而在Main窗体载入的时候,用ShowDialog()方法,显示登录窗体,然后在登录窗体进行相应的操作以及判断,并将数据传递过去。然后隐藏登录窗体,显示Main窗体。

代码:
None.gif // 截取一部分代码
None.gif
// Main代码部分,在载入窗体的时候显示登录窗体
None.gif

None.gif        [STAThread]
None.gif        
static   void  Main() 
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            LogonFrm lfrm 
= new LogonFrm();
InBlock.gif            MainFrm mfrm 
= new MainFrm();//将MainFrm实例化
InBlock.gif            lfrm.mfrm 
= mfrm;//对与登录窗体的对象
InBlock.gif            lfrm.ShowDialog();//显示登录窗体
InBlock.gif            Application.Run(mfrm);
ExpandedBlockEnd.gif        }

None.gif // 这是登录窗体
None.gif

None.gif
public  MainFrm mfrm;
None.gif
// 将建立一个MainFrm类型的对象
None.gif
None.gif
// 处理登录操作
None.gif
     private   void  button1_Click( object  sender, System.EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
if(this.username.Text.Trim()!="" && this.pwd.Text.Trim()!="")
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif
//将数据传递给MainFrm对象
InBlock.gif
                mfrm.UserName = "用户名:"+this.username.Text;
InBlock.gif                mfrm.PWD 
= "密 码:"+this.pwd.Text;
InBlock.gif                
this.Hide();
InBlock.gif                mfrm.Show();
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockStart.gifContractedSubBlock.gif            
elsedot.gif{
InBlock.gif                MessageBox.Show(
"用户名密码不能为空!");
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif

3、使用独立进程的登录窗体

现在这种模式我还没有实现,概念就是登录窗体和Main窗体使用各自独立的进程,而当登录成功的时候不再是隐藏登录窗体,而是关闭。这样应该是对释放资源有一定好处的,呵呵

以上是我的一些个人看法,有什么问题,还请大家多多指正,或者您有更好的实现登录的方法,请告诉我。

转载于:https://www.cnblogs.com/voodooq/archive/2004/08/31/38002.html

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页