使用控制台调试WinForm窗体程序
.程序代码结构

.Win32DebuggerHelper.cs
using System.Runtime.InteropServices; /* TODO:使用方法
Win32.AllocConsole();
Console.WriteLine(@"我是调试信息:目前已经运行到加载事件中");
*/ namespace WinFormUseConsoleToTestProgramDemo
{
/// <summary>
/// 通过控制台Console调试WinForm程序
/// LDH @ 2018-2-26
/// </summary>
public class Win32DebuggerHelper
{
[DllImport("kernel32.dll")]
public static extern bool AllocConsole(); [DllImport("kernel32.dll")]
public static extern bool FreeConsole();
}
}
.FrmMain.cs
using System;
using System.Windows.Forms; namespace WinFormUseConsoleToTestProgramDemo
{
/// <summary>
/// WinForm中使用Console控制台显示调试信息,方便调试WinForm窗体程序
/// LDH @ 2018-2-26
/// </summary>
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
} #region 无边框窗体拖动API /// <summary>
/// 重写WndProc方法,实现窗体移动和禁止双击最大化
/// </summary>
/// <param name="m">Windows 消息</param>
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x4e:
case 0xd:
case 0xe:
case 0x14:
base.WndProc(ref m);
break; case 0x84: //鼠标点任意位置后可以拖动窗体
DefWndProc(ref m);
if (m.Result.ToInt32() == 0x01)
{
m.Result = new IntPtr(0x02);
}
break; case 0xA3: //禁止双击最大化
break; default:
base.WndProc(ref m);
break;
}
} #endregion /// <summary>
/// 窗体加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmMain_Load(object sender, EventArgs e)
{
FormBorderStyle = FormBorderStyle.None;
Win32DebuggerHelper.AllocConsole();
Console.Title = @"WinForm中使用Console控制台显示调试信息,方便调试WinForm窗体程序 By LDH";
} /// <summary>
/// 计算
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCalculate_Click(object sender, EventArgs e)
{
Console.Clear();
Console.WriteLine(@"我已经运行到方法 private void btnCalculate_Click(object sender, EventArgs e)"); var textBoxNum1 = textBoxNumber1.Text.Trim();
var textBoxNum2 = textBoxNumber2.Text.Trim(); //if (string.IsNullOrEmpty(textBoxNum1))
//{
// textBoxNumber1.Focus();
// return;
//} //if (string.IsNullOrEmpty(textBoxNum2))
//{
// textBoxNumber2.Focus();
// return;
//} try
{
var num1 = Convert.ToDouble(textBoxNum1);
var num2 = Convert.ToDouble(textBoxNum2); txtResult.Text = (num1/num2).ToString("F");
}
catch (Exception ex)
{
Console.WriteLine(@"###########################################################################################");
Console.WriteLine(@"异常出现位置:{1}{0}", Environment.NewLine, ex.StackTrace);
Console.WriteLine(@"异常方法:{1}{0}", Environment.NewLine, ex.TargetSite);
Console.WriteLine(@"###########################################################################################");
}
}
}
}
.程序运行录像

使用控制台调试WinForm窗体程序的更多相关文章
- 【转载】Visual Studio中WinForm窗体程序如何切换.NET Framework版本
在C#语言的WinForm窗体程序中,有时候我们需要切换WinForm窗体程序项目的.NET Framework版本号,例如从.NET Framework 4.5版本切换到.NET Framework ...
- 【转载】Visual Studio2017如何打包发布Winform窗体程序
在用C#语言编写好Winform窗体程序后,最后一步的操作是将设计好的Winform程序代码进行打包以及发布成安装包.在Visual Studio2017开发工具中,打包发布WinForm程序是比较简 ...
- winform窗体程序运行后怎样隐藏?
运行winform窗体,我们是怎样隐藏的呢? 例子: 1)创建简单winform窗体 2)编写隐藏窗体程序的代码 3)效果演示 1)创建一个简单的winform窗体MainForm,
- 新认知之WinForm窗体程序
Windows应用程序和控制台应用程序有很大的区别 >Form1.cs :窗体文件,程序员对窗体编写的代码一般都存放在这个文件中. >Form1.Designer.cs :窗体设计文件, ...
- WinForm窗体下Excel的导入
一.Winform窗体程序的Excel的导入 把Excel导入到内存中的DataTable 方法实现: #region ExcelToDataTable public static DataTable ...
- winform窗体继承泛型类时,设计器无法使用解决办法
当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的. 目前我没有找到根本解决的办法,但 ...
- WinForm窗体项目 之 MySchool管理系统终极版
学习WinForm窗体程序也有一段时间了,今天就来尝试着来一个项目热热身~ 在我们通常使用的MySchool管理中,不外乎这几种功能:增.删.改.查.改密码 在过去的C#中确实是挺简单的,但是在学习了 ...
- 解决Winform应用程序中窗体背景闪烁的问题
本文转载:https://my.oschina.net/Tsybius2014/blog/659742 我的操作系统是Win7,使用的VS版本是VS2012,文中的代码都是C#代码. 这几天遇到一个问 ...
- C#将exe运行程序嵌入到自己的winform窗体中
以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的e ...
随机推荐
- 【Python】 如何用pyinstaller打包python程序成exe
[pyinstaller] pyinstaller在他们的官方网站上下载:http://www.pyinstaller.org/ 下载完pyinstaller之后还要安装一个支持包pywin32. 这 ...
- 浅析Python3中的bytes和str类型
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
- 将 Shiro 作为应用的权限基础 四:shiro的配置说明
Apache Shiro的配置主要分为四部分: SecurityManager的配置 URL过滤器的配置 静态用户配置 静态角色配置 其中,由于用户.角色一般由后台进行操作的动态数据,比如通过@Req ...
- 微信公众平台开发,API接入与推送事件(1)
博客好久没有更新了,今天说说微信开发.微信开发的好多初学者都会又这样的迷惑,微信开发到底是什么?其实微信开发本质我和我们的网站开发没有太大的区别.我们常说的微信开发也就是公众号开,微信公众号分为三个类 ...
- Git详细教程(2)---多人协作开发
Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...
- Flume日志采集系统
1.简介 Flume是Cloudera提供的一个高可用.高可靠.分布式的海量日志采集.聚合和传输的系统. Flume支持在日志系统中定制各类数据发送方用于收集数据,同时Flume提供对数据进行简单的处 ...
- 关于hbase中的hbase-site.xml 配置详解
该文档是用Hbase默认配置文件生成的,文件源是 hbase-default.xml hbase.rootdir 这个目录是region server的共享目录,用来持久化HBase.URL需要是'完 ...
- ssh框架-Struts2(一)
Struts2 概述 用我们自己的话来说: struts是web层框架, 相当于Servlet 作用: 1. 获得请求参数 2. 调用业务 3. 分发转向 常用的WEB层框架 Struts2入门 1. ...
- python实现京东秒杀
# _*_coding:utf-8_*_ from selenium import webdriver import datetime import time driver = webdriver.C ...
- poj2029 Get Many Persimmon Trees
http://poj.org/problem?id=2029 单点修改 矩阵查询 二维线段树 #include<cstdio> #include<cstring> #inclu ...