分类
标签
.NET 9008 adb android apt asp.net ASP.NET Core audio bug C c++ C++ chrome cmd csharp CSharp css css3 debian debug dotnet dotnet Framework dpkg GDI&GDI+ gdi&gdi+ golang graphics html html5 http java javascript json kali linux linux mci microsoft minimap MSBuild mysql OpenCV PInvoke powershell python QQ rust shell speex sql tutorial ubuntu ui unity vb.net visual studio Visual Studio web Web win32 winapi windows winform WinForm wpf WPF xaml xfce 列表 刷机 前端 加密 反射 反编译 可视化 图像处理 多线程 字符串 安卓 实例 局域网 幻影坦克 库 开发语言 异步 微信 手册 手机 接口 摘要 救砖 数字签名 数字证书 数字音频 数据库 桌面程序 游戏 游戏引擎 源码 爬虫 玩游戏 电脑硬件 笔记 算法 类库 线性代数 编程语言 网络 脚本语言 计算机图形学 计算机基础 设计模式 语音编解码 运维 进制 面向对象编程 音频 音频编码解码
428 字
2 分钟
C# 动态输入
C# 动态输入,在输入时你也可以访问你写入的内容)
注意,这里是在我刚学C#时写的,但我不想删除任何我的足迹. ==这个类库不是完善的,如果需要完整功能(真的很好用),请去我的新文章==: [C#] 控制台动态输入 - 增强版ReadLine()
代码:
主要就是能够实现在输入的同时,子线程可以通过该实例的Text属性来访问已经输入了的内容,别的倒也懒得实现了awa
刚学不久,不喜勿喷
//其实代码不怎么好,做做参考就可以了,注意:没有普通Console.ReadLine()的上下键功能
class DynamicInput
{
class CharInfo
{
public CharInfo(int position,char chr)
{
this.position = position;
this.chr = chr;
}
int position;
char chr;
public int Position
{
get
{
return position;
}
}
public char Char
{
get
{
return chr;
}
}
}
delegate void Add_historyEventHandler(object sender,EventArgs e);
private int default_left;
private string text = "";
private List<string> input_history = new List<string>();
private List<CharInfo> input_list = new List<CharInfo>();
public string Text
{
get
{
return text;
}
}
public string Start()
{
default_left = Console.CursorLeft;
ConsoleKeyInfo key;
while (true)
{
key = Console.ReadKey();
if (key.Key.Equals(ConsoleKey.Enter))
{
return text;
} //回车确认
if (key.Key.Equals(ConsoleKey.Backspace))
{
Console.Write(" ");
if (Console.CursorLeft > input_list.Count)
{
if (input_list.Count >1 )
{
for (int i = 0; i <= Console.CursorLeft - input_list[input_list.Count-2].Position; i ++)
{
Console.Write("\b \b");
}
}
else
{
for (int i = 0; i <= Console.CursorLeft - default_left; i++)
{
Console.Write("\b \b");
}
}
}
else
{
if (input_list.Count > 1)
{
for (int i = 0; i <= Console.CursorLeft + Console.WindowLeft - input_list[input_list.Count - 2].Position; i++)
{
Console.Write("\b \b");
}
}
else
{
for (int i = 0; i <= Console.CursorLeft + Console.WindowLeft - default_left; i++)
{
Console.Write("\b \b");
}
}
}
if(input_list.Count > 0)
{
text = text.Substring(0, text.Length - 1);
input_list.RemoveAt(input_list.Count - 1);
}
continue;
} //BackSpace退格
if (!key.Key.Equals(ConsoleKey.Spacebar) & (key.KeyChar == ' '|key.KeyChar == '\0'))
{
Console.Write("\b");
continue;
}
text += key.KeyChar; //更新Text
input_list.Add(new CharInfo(Console.CursorLeft, key.KeyChar)); //记录字符与位置
}
}
}