.程序代码结构

.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窗体程序的更多相关文章

  1. 【转载】Visual Studio中WinForm窗体程序如何切换.NET Framework版本

    在C#语言的WinForm窗体程序中,有时候我们需要切换WinForm窗体程序项目的.NET Framework版本号,例如从.NET Framework 4.5版本切换到.NET Framework ...

  2. 【转载】Visual Studio2017如何打包发布Winform窗体程序

    在用C#语言编写好Winform窗体程序后,最后一步的操作是将设计好的Winform程序代码进行打包以及发布成安装包.在Visual Studio2017开发工具中,打包发布WinForm程序是比较简 ...

  3. winform窗体程序运行后怎样隐藏?

    运行winform窗体,我们是怎样隐藏的呢? 例子: 1)创建简单winform窗体 2)编写隐藏窗体程序的代码 3)效果演示 1)创建一个简单的winform窗体MainForm,

  4. 新认知之WinForm窗体程序

    Windows应用程序和控制台应用程序有很大的区别 >Form1.cs  :窗体文件,程序员对窗体编写的代码一般都存放在这个文件中. >Form1.Designer.cs :窗体设计文件, ...

  5. WinForm窗体下Excel的导入

    一.Winform窗体程序的Excel的导入 把Excel导入到内存中的DataTable 方法实现: #region ExcelToDataTable public static DataTable ...

  6. winform窗体继承泛型类时,设计器无法使用解决办法

    当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的. 目前我没有找到根本解决的办法,但 ...

  7. WinForm窗体项目 之 MySchool管理系统终极版

    学习WinForm窗体程序也有一段时间了,今天就来尝试着来一个项目热热身~ 在我们通常使用的MySchool管理中,不外乎这几种功能:增.删.改.查.改密码 在过去的C#中确实是挺简单的,但是在学习了 ...

  8. 解决Winform应用程序中窗体背景闪烁的问题

    本文转载:https://my.oschina.net/Tsybius2014/blog/659742 我的操作系统是Win7,使用的VS版本是VS2012,文中的代码都是C#代码. 这几天遇到一个问 ...

  9. C#将exe运行程序嵌入到自己的winform窗体中

    以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的e ...

随机推荐

  1. Zabbix常用key和自定义key的讲解

    zabbix中常用到的几个key: 1.监控端口的:net.tcp.port[,3306],可以在服务器端对被监控端测试. /usr/local/zabbix/bin/ -s192.168.8.120 ...

  2. c++ --> typedef用法总结

    typedef用法总结 一.四大用途 用途1  定义类型别名,在大量使用指针的地方,typedef更方便 typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // ...

  3. 利用whoosh对mongoDB的中文文档建立全文检索

    1.建立索引 #coding=utf-8 from __future__ import unicode_literals __author__ = 'zh' import sys,os from wh ...

  4. Laravel 模型事件入门

    Laravel 模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除. Laravel 模型事件文档 概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨 ...

  5. windows上SSH服务连接远程主机失败

    putty连接出现错误提示"Network error:connection refused",xshell连接出现错误提示"connection failed:(por ...

  6. 一次精疲力尽的改bug经历

    一.介绍 最近一直在做有关JavaScriptCore的技术需求,上周发现一个问题,当在JavaScriptCore在垃圾回收时,项目会有一定几率发生崩溃.崩溃发生时调用堆栈如下: 图1 调用堆栈 先 ...

  7. Jmeter 前置处理器 BeanShell_PreProcessor 适用思考

    首先摘抄一段官方文档的话: Before invoking the script, some variables are set up in the BeanShell interpreter: lo ...

  8. Struct_2路径问题

    今天在自学那个Struct2的知识点的时候,发现那个相对路径和绝对路径有点遗忘.特地去看了视频还有在百度上查了一些资料.我觉得这个路径问题对于我这个初学者来说还是有点容易遗忘的.所以,今天就添加这个新 ...

  9. springmvc与freemarker的整合

    官方简介:FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户的,而是一个Java ...

  10. NOIP知识点

    基础算法 贪心 枚举 分治 二分 倍增 高精度 模拟 图论 图 最短路(dijkstra.spfa.floyd) 最小生成树(kruskal.prim) 并查集 拓扑排序 二分图染色 Tarjan 树 ...