问题描述
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceUserLogin{classProgram{staticvoidMain(string[]args){Console.WriteLine("n******************************这里是首页******************************nnn");Console.WriteLine("请选择您要进行的操作,Enter为登陆,ESC为退出系统!n");stringUserName,PassWord;boolisLogin=false;//初始化登陆状态为falseboolUNameOK=false;//初始化用户名输入状态为falseboolPWordOK=false;//初始化密码输入状态为falsewhile(!isLogin){ConsoleKeyInfokinfo=Console.ReadKey();//获取用户按键if(kinfo.Key==ConsoleKey.Enter)//判断按键是否为Enter{Console.WriteLine("请输入用户名(abc):(不区分大小写)");while(!UNameOK){UserName=Console.ReadLine().ToString().ToLower();if(UserName==""){Console.WriteLine("用户名不能为空,请重新输入!");UserName=Console.ReadLine().ToString().ToLower();}elseif(UserName!="mm"){Console.WriteLine("用户名不正确,请重新输入!");UserName=Console.ReadLine().ToString().ToLower();}else{UNameOK=true;Console.WriteLine("请输入密码(123456):");PassWord=Console.ReadLine().ToString();while(!PWordOK){if(PassWord==""){Console.WriteLine("密码不能为空,请重新输入!");PassWord=Console.ReadLine().ToString();}elseif(PassWord!="123456"){Console.WriteLine("密码不正确,请重新输入!");PassWord=Console.ReadLine().ToString();}else{PWordOK=true;Console.WriteLine("******************************欢迎您,登录成功!******************************");Console.ReadLine();}}}}isLogin=true;}elseif(kinfo.Key==ConsoleKey.Escape){Environment.Exit(0);}else{Console.WriteLine("操作不合法,Enter为登陆,ESC为退出系统!");}}}}}
我现在做了个登录的小例子,上级说要实现不管什么情况下只要按下ESC就退出控制台,求指点!
解决方案
解决方案二:
重新整理下代码,让每个Console.ReadLine()后先判断Esc
解决方案三:
控制台只支持直接捕获Ctrl+C,而不是ESC。
解决方案四:
系统自带的不行,不过可以自己做一个
解决方案五:
引用1楼xdashewan的回复:
重新整理下代码,让每个Console.ReadLine()后先判断Esc
我错了,没注意Console.ReadLine不接受esc,你得这么改,把Console.ReadLine手动实现,循环接受key,如果是esc就退了,不是你得把回退,左右箭头什么特殊按键都实现了,用来拼接,插入和调整字符串,直到接受到回车,开始处理下一步业务。不过我也觉得【sp1234】说的有道理,控制台并不是用esc来结束的
解决方案六:
上级说不管什么情况下,这个上级是不懂技术的上级吧这个不管什么情况真他妈的具体啊!
解决方案七:
我突然想到个办法,再创建一个窗口程序,用RegisterHotKey注册一个全局的esc热键在控制台程序开始的时候启动它
解决方案八:
HOOK键盘API
解决方案九:
http://blog.csdn.net/cmdhack/article/details/6132383看这个,你要给他装上消息相应代码
解决方案十:
如果你写vark=Console.ReadKey(true);varc=comm=k.KeyChar;
在拼音输入模式下,如果你输入“张三”,那么KeyChar就能收到两个字符“张、三”。因此你可以把你的Console.ReadLine改为使用这样的输入语句的循环。这样你就能判断[code=cshaif(c==27)rp][/code]。
解决方案十一:
vark=Console.ReadKey(true);varc=k.KeyChar;
解决方案十二:
例如你可以自己实现一个ReadLine函数publicstaticstringReadLine(Action<char>charInp=null){varret=newStringBuilder();begin:vark=Console.ReadKey();varc=k.KeyChar;if(charInp!=null)charInp(c);if(c=='r')returnret.ToString();ret.Append(c);gotobegin;}}
然后在你的输入中,写UserName=ReadLine(c=>{if(c==27)Environment.Exit(0);});UserName=UserName.ToLower();
当然你也可以把对于ESC的判断处理写死到ReadLine函数内部,这样对你来说可能更简单。只不过下次如果执拗的领导又要求你判断别的键的时候(比如说Tab键),就又要重写ReadLine函数了。
解决方案十三:
天下之大,好大一朵奇葩啊