使用控制台调试WinForm窗体程序

1.程序代码结构

2.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();
    }
}
3.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(@"###########################################################################################");
            }
        }
    }
}
4.程序运行录像

原文地址:https://www.cnblogs.com/LifeDecidesHappiness/p/8471769.html

时间: 2024-08-22 21:41:12

使用控制台调试WinForm窗体程序的相关文章

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

运行winform窗体,我们是怎样隐藏的呢? 例子: 1)创建简单winform窗体 2)编写隐藏窗体程序的代码 3)效果演示 1)创建一个简单的winform窗体MainForm, 这样运行后,在任务栏能看到窗体,怎样隐藏,在load事件中加上 //窗体最小化显示    this.WindowState = FormWindowState.Minimized;    //不显示在任务栏中    this.ShowInTaskbar = false; 可以通过设置窗体最小化运行,不显示在任务栏,

新认知之WinForm窗体程序

Windows应用程序和控制台应用程序有很大的区别 >Form1.cs  :窗体文件,程序员对窗体编写的代码一般都存放在这个文件中. >Form1.Designer.cs :窗体设计文件,其中的代码是有Visual Studio自动生成的,一般不需要修改. >Form1.resx  :资源文件,用来配置当前窗体所使用的字符串,图片等资源. >Program.cs  :主程序文件,其中包含程序入口的Main()方法 Partial  >     在窗体类的前面多了一个parti

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

当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的. 目前我没有找到根本解决的办法,但可以间接解决无法调试的问题. 下面具体说明如何实现 比如我们有FormA,BaseForm<Entity>, FormA : BaseForm<XXX> 这样直接继承是无法使用设计器的. 需要增加一个临时的form类,比如TempForm. 由TempForm先继承BaseForm, 

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

本文转载:https://my.oschina.net/Tsybius2014/blog/659742 我的操作系统是Win7,使用的VS版本是VS2012,文中的代码都是C#代码. 这几天遇到一个问题,即我用一个嵌入图片的Panel作为Winform应用程序的背景,如下图所示: 这是一个Winform窗体,里面放置了一个Panel,Dock属性为Fill,BackgroundImage使用了<少年电世界>2003年第02期的封面图片,BackgroundImageLayout使用了Stret

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

以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的exe(如word,Excel之类),.net的编的exe就不能用这用方法嵌入到窗体中. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Syst

Winform应用程序实现通用遮罩层

Winform应用程序实现通用遮罩层 在WEB上,我们在需要进行大数据或复杂逻辑处理时,由于耗时较长,一般我们会在处理过程中的页面上显示一个半透明的遮罩层,上面放个图标或提示:正在处理中...等字样,这样用户体验就比较好了,然而如果在Winform客户端程序,通常遮罩层的处理就显得不那么简单或不那么好看,而我今天要说明的是,我实现的这个Winform通用遮罩层,却可以实现类似WEB上的遮罩层,既可以透明,而且还可以显示动态图片以及文字,那如何实现的呢,我现在一一讲解. 首先要明确我们要实现的效果

Winform应用程序实现通用遮罩层二

之前先后发表过:<Winform应用程序实现通用遮罩层>.<Winform应用程序实现通用消息窗口>,这两款遮罩层其实都是基于弹出窗口的,今天为大家分享一个比较简单但界面相对友好的另一种实现方案,废话不多说,直接进入主题. 一.实现思路(解决问题顺序): 透明遮罩: 1.实现可设置透明的Panel控件(MaskPanel): 2.Panel控件(MaskPanel)能够覆盖父容器(一般是当前窗体form对象)客户区区域(即:与父容器客户区区域大小相同),并处于最上层,保证父容器上的

.NET 基础 一步步 一幕幕[Winform应用程序]

时隔半载,重回博客园,一切从头再来,今天只是开始,原谅我这一生放荡不羁爱自由. 进入今天得主题曲:Winform应用程序(简介) 1.      winform应用程序是一种智能客户端技术,我们可以使用winform应用程序,帮助我们获得信息或者传输信息等. 2.      winform控件得属性: Name:在后台要获得前台的控件对象,需要使用Name属性. visible:指示一个控件是否可见. Enabled:指示一个控件是否可用. 3. 在Main函数当中创建的窗体对象,我们称之为这个

.NET vs2010中使用IrisSkin2.dll轻松实现winForm窗体换肤功能

.NET vs2010中使用IrisSkin2.dll轻松实现winForm窗体换肤功能 转载▼ 大家好,从事c-s开发的C#程序员经常为winForm的界面设计苦恼,笔者曾经也深受“美工神话”的危害,如今提到美工,界面布局设计就开始蛋疼…. 所幸的是,笔者无意间接触到了一些比较可爱的第三方控件,可以为我们程序员省掉很多美工上面的麻烦…在陆续的博客中我会为大家介绍,今天我们的主题是:IrisSkin2.dll IrisSkin2.dll是一款很不错的免费皮肤控件,利用它可以轻松的实现winFor