带有登录窗口的Window程序启动控制
默认的Main函数是
[STAThread]
static void Main()
{
ApplicationEnableVisualStyles();
ApplicationSetCompatibleTextRenderingDefault(false);
ApplicationRun(new frmMain());
}
关键的是ApplicationRun(new frmMain());这一句如果Run函数里是主窗口则就要另外想办法在主窗口显示之前让用户登录如果Run函数里创建的是登录窗口则登录窗口完成其登录工作之后就只能隐藏而不能关闭否则整个应用程序就结束了
解决这种问题主要有两种方法
)ApplicationRun(new frmMain());函数里创建主窗口在主窗口加载后显示之前使之隐藏并显示登录窗口如果登录成功则关闭登录窗口显示主窗口如果登录失败则结束应用程序这样处理有一个小问题就是要无论登录是否成功实际都要加载主窗口的好处是不用修改Main函数对一些用户来说可能更好控制一些
)修改Main函数使之在ApplicationRun(new frmMain());之前进行登录验证登录成功则正常运行登录失败则结束应用程序大体过程如下
[STAThread]
static void Main()
{
ApplicationEnableVisualStyles();
ApplicationSetCompatibleTextRenderingDefault(false);
frmLogin login = new frmLogin();
loginShowDialog(); // 注意这个地方只能是ShowDialog而不能是Show
if(loginHasLogin) // 判断是否登录成功
{
loginClose();
ApplicationRun(new frmMain());
}
else
{
ApplicationExit();
}
}
这样做的好处是在登录失败时直接关闭应用程序而无需加载主窗口
实际两种方法都可以达到相同的目的
回车键按下时处理成等同于按下Tab键
常用的处理方法有两个
)响应每一个要处理的控件的keypress事件在该事件中判断如果按下的是回车让下一个控件获得焦点代码如下
private void txt_KeyPress(object sender KeyPressEventArgs e)
{
if(eKeyChar == )
{
// nextControlFocus(); // 使下一个控件获得焦点
SendKeysSend({tab}); // 这样也是可以的
}
}
)所有要把回车处理成Tab的控件共享一个keypress事件当按下的是回车时发送一个tab键代码如下
private void my_KeyPress(object sender
KeyPressEventArgs e)
{
if (eKeyChar == )
{
SendKeysSend({tab});
}
}
第一种处理方式是针对每一个控件写事件其好处是更好控制尤其是在除处理回车按键外还要实现其他功能时就只能这样处理第二种方式的好处是可以多个控件共享同一个事件特别是在动态创建控件时而对每个控件只处理回车时可以动态的把事件挂到控件上这样就更显示出这种方式的优势不足是对控件除要处理回车外还要有其他个性功能时就很难实现
用户可以根据实现情况进行选择使用