一个简易的C#信息展示板

本文中的展示板是用TextBox实现的,因为工作需要,我实现了一个向TextBox自动生成格式化信息的工具类DisplayBoardHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DisplayBoard
{
    public class DisplayBoardHelper
    {
        /// <summary>
        /// 事件等级
        /// </summary>
        public enum LogLevel
        {
            /// <summary>
            /// 调试
            /// </summary>
            DEBUG = 0,
            /// <summary>
            /// 信息
            /// </summary>
            INFO = 1,
            /// <summary>
            /// 通知
            /// </summary>
            NOTICE = 2,
            /// <summary>
            /// 警告
            /// </summary>
            WARNING = 3,
            /// <summary>
            /// 错误
            /// </summary>
            ERROR = 4,
            /// <summary>
            /// 严重
            /// </summary>
            CRIT = 5,
            /// <summary>
            /// 危险
            /// </summary>
            ALERT = 6,
            /// <summary>
            /// 紧急
            /// </summary>
            EMERG = 7
        }

        /// <summary>
        /// 将报警等级的枚举打印成字符串
        /// </summary>
        /// <param name="level">事件等级</param>
        /// <param name="lang">输出字符串语言 CHS:简体中文 ENG:英语</param>
        /// <returns></returns>
        private static string LevelToString(LogLevel level, string lang = "CHS")
        {
            if (lang == "CHS")
            {
                switch (level)
                {
                    case LogLevel.DEBUG: return "调试";
                    case LogLevel.INFO: return "信息";
                    case LogLevel.NOTICE: return "通知";
                    case LogLevel.WARNING: return "警告";
                    case LogLevel.ERROR: return "错误";
                    case LogLevel.CRIT: return "严重";
                    case LogLevel.ALERT: return "危险";
                    case LogLevel.EMERG: return "紧急";
                    default: return "未知";
                }
            }
            else if (lang == "ENG")
            {
                switch (level)
                {
                    case LogLevel.DEBUG: return "DEBUG";
                    case LogLevel.INFO: return "INFO";
                    case LogLevel.NOTICE: return "NOTICE";
                    case LogLevel.WARNING: return "WARNING";
                    case LogLevel.ERROR: return "ERROR";
                    case LogLevel.CRIT: return "CRIT";
                    case LogLevel.ALERT: return "ALERT";
                    case LogLevel.EMERG: return "EMERG";
                    default: return "UNKNOWN";
                }
            }
            else
            {
                throw new Exception(lang + ":未知语言类型");
            }
        }

        /// <summary>
        /// 向指定的TextBox中添加一条新日志
        /// </summary>
        /// <param name="tb">TextBox对象</param>
        /// <param name="logLevel">日志等级</param>
        /// <param name="logInfo">日志信息</param>
        /// <param name="lang">使用语言</param>
        public static void AddLog(System.Windows.Forms.TextBox tb, 
            LogLevel logLevel, string logInfo, string lang = "CHS")
        {
            string sNewLog = string.Format("[{0}][{1}]:{2}\r\n",
                DateTime.Now.ToLongTimeString(),
                LevelToString(logLevel, lang),
                logInfo);

            tb.Text += sNewLog;
            tb.Select(tb.TextLength, 0);
            tb.ScrollToCaret();
        }

        /// <summary>
        /// 查看TextBox的设置是否符合库最佳使用环境(这个函数并不是必须的,可以选择性调用)
        /// </summary>
        /// <param name="tb">TextBox对象</param>
        /// <param name="suggestion">建议(返回false时可查看)</param>
        /// <returns>true:合理 false:不合理</returns>
        public static bool IsConfigReasonable(
            System.Windows.Forms.TextBox tb,
            out string suggestion)
        {
            bool isConfigReasonable = true;
            suggestion = "建议:\n";

            //TextBox应被设置为支持多行
            if (tb.Multiline == false)
            {
                suggestion += "控件" + tb.Name + "只支持单行文本(Multiline)\n";
                isConfigReasonable = false;
            }

            //TextBox应被设置为支持纵向滚动条
            if (tb.ScrollBars != System.Windows.Forms.ScrollBars.Vertical ||
                tb.ScrollBars != System.Windows.Forms.ScrollBars.Both)
            {
                suggestion += "控件" + tb.Name + "缺少纵向滚动条(ScrollBars)\n";
                isConfigReasonable = false;
            }

            //ReadOnly属性和Enable属性应至少设置一个确保TextBox只读
            if (tb.ReadOnly == false && tb.Enabled == true)
            {
                suggestion += "控件" + tb.Name + "可任意修改(ReadOnly or Enabled)\n";
                isConfigReasonable = false;
            }

            //没有问题,不需要建议
            if (isConfigReasonable)
            {
                suggestion = "";
            }

            return isConfigReasonable;
        }
    }
}

下面是这个示例程序的实现,这个示例程序中只有一个Dock属性被设置为Fill的TextBox

程序代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DisplayBoard
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            //写入一些日志
            DisplayBoardHelper.AddLog(this.txtDisplayBoard, 
                DisplayBoardHelper.LogLevel.DEBUG, "这是一条测试信息");
            DisplayBoardHelper.AddLog(this.txtDisplayBoard, 
                DisplayBoardHelper.LogLevel.INFO, "这是一条测试信息");
            DisplayBoardHelper.AddLog(this.txtDisplayBoard, 
                DisplayBoardHelper.LogLevel.NOTICE, "这是一条测试信息");
            DisplayBoardHelper.AddLog(this.txtDisplayBoard, 
                DisplayBoardHelper.LogLevel.WARNING, "这是一条测试信息");
            DisplayBoardHelper.AddLog(this.txtDisplayBoard, 
                DisplayBoardHelper.LogLevel.ERROR, "这是一条测试信息");
            DisplayBoardHelper.AddLog(this.txtDisplayBoard, 
                DisplayBoardHelper.LogLevel.CRIT, "这是一条测试信息");
            DisplayBoardHelper.AddLog(this.txtDisplayBoard, 
                DisplayBoardHelper.LogLevel.ALERT, "这是一条测试信息");
            DisplayBoardHelper.AddLog(this.txtDisplayBoard, 
                DisplayBoardHelper.LogLevel.EMERG, "这是一条测试信息");

            //查看TextBox的设置是否符合库最佳使用环境
            string suggestion;
            bool b = DisplayBoardHelper.IsConfigReasonable(
                this.txtDisplayBoard, out suggestion);
            if (!b)
            {
                MessageBox.Show(suggestion);
            }
        }
    }
}

运行结果示例

DisplayBoardHelper.IsConfigReasonable生成的使用环境建议

END

时间: 2024-10-28 16:45:21

一个简易的C#信息展示板的相关文章

Socket 初识 用Socket建立一个简易Web服务器

摘自<Asp.Net 本质论>作者:郝冠军 //在.Net中.system.Net命名空间提供了网络编程的大多数数据据类型以及常用操作,其中常用的类型如下:/*IPAddress 类表示一个IP地址* IPEndPoint类用来表示一个IP地址和一个端口号的组合,成为网络的端点.* System.Net.Sockets命名空间中提供了基于Socked编程的数据类型.* Socket类封装了Socked的操作.* 常见的操作:* Listen:设置基于连接通信的Socket进入监听状态,并设置等

Tinywebserver:一个简易的web服务器

这是学习网络编程后写的一个练手的小程序,可以帮助复习I/O模型,epoll使用,线程池,HTTP协议等内容. 程序代码是基于<Linux高性能服务器编程>一书编写的. 首先回顾程序中的核心内容和主要问题,最后给出相关代码. 0. 功能和I/O模型 实现简易的HTTP服务端,现仅支持GET方法,通过浏览器访问可以返回相应内容. I/O模型采用Reactor(I/O复用 + 非阻塞I/O) + 线程池. 使用epoll事件循环用作事件通知,如果listenfd上可读,则调用accept,把新建的f

探秘Tomcat——一个简易的Servlet容器

即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少有所了解.servlet是用java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者. 容器 容器的概念很大,在这里

C 实现一个简易的Http服务器

引言 做一个老实人挺好的,至少还觉得自己挺老实的. 再分享一首 自己喜欢的诗人的一首 情景诗. 每个人总会有问题,至少喜欢就好, 本文 参照 http 协议   http://www.cnblogs.com/rayray/p/3729533.html html格式   http://blog.csdn.net/allenjy123/article/details/7375029 tinyhttpd 源码    https://github.com/EZLippi/Tinyhttpd 附录 本文最

一个简易的便签工具:探索窗体之间传值和传引用的方法

简单的便签工具:实现了基于文本的便签信息的浏览,删除,添加.可以查看时间,实时更新数据. 这个便签工具完全基于面向对象的编程方式,首先定义Note类,然后使用NoteManager类进行便签的管理.其中的关键就是在NoteManager类中定义list<Note>泛型集合.原理上和ArrayList基本是一致的. NoteManager的工作原理: public List<Note> list;//定义一个泛型集合,并在构造函数中初始化. private int CurrentIn

vue + socket.io实现一个简易聊天室

vue + vuex + elementUi + socket.io实现一个简易的在线聊天室,提高自己在对vue系列在项目中应用的深度.因为学会一个库或者框架容易,但要结合项目使用一个库或框架就不是那么容易了.功能虽然不多,但还是有收获.设计和实现思路较为拙劣,恳请各位大大指正. 可以达到的需求 能查看在线用户列表 能发送和接受消息 使用到的框架和库 socket.io做为实时通讯基础 vuex/vue:客户端Ui层使用 Element-ui:客户端Ui组件 类文件关系图 服务端: 客户端: 服

一个简易的发布电影票的项目

原文:一个简易的发布电影票的项目 源代码下载地址:http://www.zuidaima.com/share/1601881858886656.htm 在首页(index.html)页面上,按照影片发表时间显示所有影片 点击index.html页面右边的影片类型链接,在页面左边显示对应影片 根据影片的名称进行搜索 当鼠标悬停到影片的图片上,显示影片的详细信息 发布新影片(不要求实现上传图片功能) 发布新影片时可以使用struts2组件上传图片 提供数据库脚本 分层实现 使用struts2框架和j

用HTML5 Web Storage作一个简易聊天室

前 言: 2个月前为了一个评论让我潜水(潜伏)博客园2年作了一次艰难的决定.注册了一个账号! 没事瞎逛博客园以及其他技术网站,发现一个不错的留言墙.就看了其中使用的技术.呀!惊呆了.居然是HTML5,完全没接触过呀! 再 言: 所以就搜了博客园相关文档,有如下信息: @#$^%&*( $&^^**(&( http://zzk.cnblogs.com/s?t=b&w=html5%20Storage #$%&^&*( %*(&()*%$ 资料太多了,你也

ENode 2.0 第一个真实案例剖析-一个简易论坛(Forum)

前言 经过不断的坚持和努力,ENode 2.0的第一个真实案例终于出来了.这个案例是一个简易的论坛,开发这个论坛的初衷是为了验证用ENode框架来开发一个真实项目的可行性.关于ENode是什么,本文就不多介绍了,可以参考这篇文章的介绍.本文重点介绍一下ENode是如何帮助我们开发一个基于DDD+CQRS+Event Sourcing架构的应用程序的.这个论坛使用到了ENode, EQueue两个框架,EQueue是一个分布式的消息队列组件,该组件的主体思想是参考阿里的RocketMQ.当我们使用