求助,C#怎么实现只要一按ESC就关闭控制台?

问题描述

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函数了。
解决方案十三:
天下之大,好大一朵奇葩啊

时间: 2024-08-03 23:02:06

求助,C#怎么实现只要一按ESC就关闭控制台?的相关文章

bios-求助求助~求助大神,我的电脑每次开机都是这样。

问题描述 求助求助~求助大神,我的电脑每次开机都是这样. 为什么我的电脑每次看机都是这样,虽然可以正常进入程序,但是每次都是这样 好麻烦,想问一下大神有什么好的解决办法吗?我的电脑是戴尔的,之前是Win10的系统,之后装上Win7之后出现的这种情况. 解决方案 这方面的问题我在修电脑的时候遇到过,不过不会影响系统的使用,所以我一直都没有管它的,我以前在BIOS里面调过,可是不见天又出来了,目前我是没有什么好的方法去弄这个了,朋友我劝你还是忽略的比较好,这个相当于电脑启东时的系统保护 解决方案二:

c语言之贪吃蛇游戏,为什么最后运行时没有苹果出现?求助大神!!!

问题描述 c语言之贪吃蛇游戏为什么最后运行时没有苹果出现求助大神 /* c语言之贪吃蛇 */ #include #include #include #include #include #include #define N 21 int apple[3]; //食物 char score[3]; //分数 char tail [3];//蛇尾前面一节 //输出坐标 void gotoxy(int x,int y) { COORD pos; pos.X=x; pos.Y=y; SetConsoleC

android包名求助!!!!!!

问题描述 android包名求助!!!!!! 有人在APP或者其他地方见过com.android.phone.os这样的包吗? 解决方案 好像没有见过,os是在android.os 解决方案二: org.mozilla.firefox com.android.chrome 在国外网站下载的android安装包,似乎是那样分类的,社区的,公司的... 解决方案三: 我没大写清楚,这个是我们的一个APP经常报一个错误,从用户得到的错误消息堆栈有下面的信息:java.lang.NoSuchFieldE

求助贴:c语言编程问题

问题描述 求助贴:c语言编程问题 解决方案 在你的程序里scanf()函数返回的是一个正整数,无论你输入的是不是-1,他接收的一直是一个参数,所以返回的一直是1.并且还是使用"%lu"来接收参数的,输入-1一定不会退出程序的,输入1.2scanf()只接收到了1,因为1.2不符合输入的规则"%lu",也会返回1.程序不会停下 解决方案二: 疑惑:1.输入0有效,输出真确2.输入-1不退出,-1被强制转换为int类型3.输入1.2输出1个奇数后又printf();然后

asp.net求助????????,求解答

问题描述 asp.net求助????????,求解答 public virtual object DataSource { [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get { return this.dataSource; } set { if (((value != null) && !(val

java-为什么我只运行下面的Server没运行Client,也有一个Client连上来,各位神求助啊

问题描述 为什么我只运行下面的Server没运行Client,也有一个Client连上来,各位神求助啊 import java.io.*;import java.net.*; public class ChatServer { public static void main(String[] args){ /*InetAddress ServerIPaddress=null; try { ServerIPaddress=InetAddress.getLocalHost();} catch (Un

django-Django-cas 单点登录求助大神

问题描述 Django-cas 单点登录求助大神 报错信息:[Errno socket error] [Errno 1] _ssl.c:504: error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error Django Setting文件里面已经安装配置配置了,附上setting部分代码: INSTALLED_APPS = ( 'django.contrib.admin' 'django.contri

求助,正则表达式关于扩展名

问题描述 求助,正则表达式关于扩展名 我想检验后缀名为doc;ppt;exe可以输入一个或多个扩展名.多个用";"号隔开.就像我上面写的那样.该怎么写呢? 解决方案 ^[a-zd]+(;[a-zd]+)*$ 解决方案二: 提取扩展名的正则表达式求助正则表达式正则表达式

js-新手求助关于根据选中的radio而获取同一行里面的所有td的值

问题描述 新手求助关于根据选中的radio而获取同一行里面的所有td的值 求教,想根据选中的radio来获取该radio所在那一行里面的所有的td值(每个td里面的值要分别获取出来) 该怎么做呢? <c:forEach items="${logoutAccountForm.accountList}" var="logoutList"> <tr height="55" class="table_centent_bj_co