[C#] 将状态信息放置在控制台最下面

本贴最后更新于 2251 天前,其中的信息可能已经沧海桑田

** ConsoleInput**

public class ConsoleInput { private string inputString = string.Empty; private readonly List<string> inputHistory = new List<string>(); internal readonly string[] StatusTextLeft = { string.Empty, string.Empty, string.Empty, string.Empty }; internal readonly string[] StatusTextRight = { string.Empty, string.Empty, string.Empty, string.Empty }; internal readonly ConsoleColor[] StatusTextLeftColor = { ConsoleColor.White, ConsoleColor.White, ConsoleColor.White, ConsoleColor.White }; internal readonly ConsoleColor[] StatusTextRightColor = { ConsoleColor.White, ConsoleColor.White, ConsoleColor.White, ConsoleColor.White }; public int LineWidth => Console.BufferWidth; public void ClearLine(int numLines) { Console.CursorLeft = 0; Console.Write(new string(' ', LineWidth * numLines)); Console.CursorTop = Console.CursorTop - numLines; Console.CursorLeft = 0; } public void RedrawInputLine() { try { Console.CursorTop = Console.CursorTop + 1; for (int i = 0; i < StatusTextLeft.Length; i++) { Console.CursorLeft = 0; Console.ForegroundColor = StatusTextLeftColor[i]; Console.Write(StatusTextLeft[i].Substring(0, Math.Min(StatusTextLeft[i].Length, LineWidth - 1))); Console.ForegroundColor = StatusTextRightColor[i]; Console.Write(StatusTextRight[i].PadRight(LineWidth)); } Console.CursorTop = Console.CursorTop - StatusTextLeft.Length -1; Console.CursorLeft = 0; Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Green; ClearLine(1); if (inputString.Length == 0) { Console.ForegroundColor = ConsoleColor.Gray; return; } Console.Write(inputString.Length >= LineWidth - 2 ? inputString.Substring(inputString.Length - (LineWidth - 2)) : inputString); Console.ForegroundColor = ConsoleColor.Gray; } catch (Exception e) { Console.WriteLine("RedrawInputLine: " + e); } } public void Update() { try { if (!Console.KeyAvailable) { return; } } catch (Exception) { return; } ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(); if (consoleKeyInfo.Key == ConsoleKey.Enter) { Console.WriteLine(inputString); inputString = string.Empty; RedrawInputLine(); return; } inputString = string.Concat(inputString, consoleKeyInfo.KeyChar); RedrawInputLine(); } }

Main

private static ConsoleInput consoleInput; private static string GetStatusValue(string status) => status != null ? status ?? string.Empty : ""; private static string GetStatusRight(int leftLength, string right) => leftLength >= right.Length ? string.Empty : right.Substring(leftLength); static void Main(string[] args) { consoleInput = new ConsoleInput(); Console.WriteLine("load............ing..............."); Console.WriteLine("ConsoleInput"); int j=0; while (true) { j++; for (int i = 0; i < consoleInput.StatusTextLeft.Length; i++) { consoleInput.StatusTextLeft[i] = GetStatusValue($"{j}{i}");//赋值 } j++; for (int i = 0; i < consoleInput.StatusTextRight.Length; i++) { consoleInput.StatusTextRight[i] = GetStatusRight(consoleInput.StatusTextLeft[i].Length, GetStatusValue($"{j}{i}").PadLeft(consoleInput.LineWidth - 1));//右边计算位置再赋值 } consoleInput.Update(); } }

bgif

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 163 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • .NET
    27 引用 • 6 回帖 • 5 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖 • 1 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 10 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    172 引用 • 516 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 456 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 36 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 759 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 640 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    267 引用 • 666 回帖 • 3 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 164 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    410 引用 • 3588 回帖
  • Visio
    1 引用 • 2 回帖 • 2 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 4 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 149 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 447 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 55 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    498 引用 • 1395 回帖 • 254 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 196 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 2 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 297 关注
  • OpenCV
    15 引用 • 36 回帖
  • 996
    13 引用 • 200 回帖 • 4 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 9 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 3 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 99 关注