WinForm程序中使用控制台(console)作为输出窗口

原创|其它|编辑:郝浩|2009-04-29 09:42:29.000|阅读 2201 次

概述:最近写了一个随机模拟的计算程序,因为计算耗时很长,所以运算中要输出一些信息,以方便用户随时了解运算的进度以及其他信息。最初打算写一个log窗口类,使用textbox控件以及 progressbar,后来发现挺麻烦,远不及console窗口下的console.write和console.writeline方便。于是尝试直接将信息输出到控制台窗口。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

       最近写了一个随机模拟的计算程序,因为计算耗时很长,所以运算中要输出一些信息,以方便用户随时了解运算的进度以及其他信息。最初打算写一个log窗口类,使用textbox控件以及 progressbar,后来发现挺麻烦,远不及console窗口下的console.write和console.writeline方便。于是尝试直接将信息输出到控制台窗口。

       1、 在winform程序中调用console窗口。这个使用Win32 API来完成。关于AllocConsole函数和FreeConsole函数的详细信息可以参见这里这里。VB.NET的代码如下:


 1Public Class ConsoleHelper
 2‘调用控制台窗口
 3<DllImport(”kernel32.dll”)> _
 4Public Shared Function AllocConsole() As Boolean
 5End Function

 6
 7’释放控制台窗口
 8<DllImport(”kernel32.dll”)> _
 9Public Shared Function FreeConsole() As Boolean
10End Function

11End Class

    在调用AllocConsole后,就将console窗口调配给当前进程使用,在当前进程的任何位置我们都可以使用console.write和console.writeline函数进行程序信息的输出了。

      2、 console窗口下绘制一个进度条。

 
 1'先绘制出进度条的底色。
 2Private Sub Init()
 3Console.WriteLine(”开始计算:” & Date.Now.ToLongDateString & Date.Now.ToLongTimeString)
 4‘绘制一个进度条背景
 5Console.BackgroundColor = ConsoleColor.DarkCyan
 6For i As Integer = 0 To 99
 7Console.Write(” “)
 8Next
 9Console.BackgroundColor = ConsoleColor.Black
10Console.WriteLine()
11End Sub

12
13'2.b 根据计算线程的进度绘制进度条
14Dim SumProg as Integer
15Private Sub DrawProgressBar
16SumProg += 1
17Console.Write(”{0}%”, SumProg)
18Console.SetCursorPosition(0, Console.CursorTop - 1)
19Console.BackgroundColor = ConsoleColor.Yellow
20For p As Integer = 0 To SumProg - 1
21Console.Write(” “)
22Next
23Console.BackgroundColor = ConsoleColor.Black
24Console.WriteLine()
25End Sub

 下面是一张效果截图。

 

 PS:第一次在园子发文章,希望大家多多指教。绘制进度条的代码写得很随意,主要目的只是想说明下思路。现在明白为什么黑洞洞的console为什么一直不死——有时候它的确方便好用。

ps1: 再补充下,具体实现时,在form上提供一个“视图”菜单项,通过可选菜单来控制console窗口的可见和隐藏(调用FreeConsole)。直接关闭console会直接导致进程关闭.......


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP