This post shows you how to output data to a Console in a Windows Forms Application. I use this technique religiously when developing Windows Forms applications. Debugging is much simpler when you can see information on what your application is doing in a Console. Of course the onus is on you as developer to output data which will help you.

In this post I will use a simple Windows Forms application which adds two numbers.

Windows Forms

By default a Windows Forms application does not output to a Console even if you write a Console.Write() or Console.WriteLine(). This shortcoming can be addressed by using Win32 API. In your Windows Forms application you can declare a class which provides a wrapper around Win32 functions.

public class Win32
{
  /// <summary>
  /// Allocates a new console for current process.
  /// </summary>
  [DllImport("kernel32.dll")]
  public static extern Boolean AllocConsole();

  /// <summary>
  /// Frees the console.
  /// </summary>
  [DllImport("kernel32.dll")]
  public static extern Boolean FreeConsole();
}

A Console must be started to accept input and display our messages. This can be done by calling Win32.AllocConsole() function. For my example I will start the console in my form’s constructor.

public Form1()
{
  InitializeComponent();

  Win32.AllocConsole();
}

Now when I write to Console, I will see data appear in the console window which was started in my constructor.

private void Add(int num1, int num2)
{
  int result = num1 + num2;

  Console.WriteLine(
    string.Format("{0} + {1} = {2}", num1, num2, result));
}

Console

As a good practice you should also close the console window by calling Win32.FreeConsole() method before your application exits.

Tagged with:
 

13 Responses to Output To Console In Windows Forms Application

  1. Kevin says:

    Thanks for the tip. Too bad Console.Clear does not work under Vista although works fine under XP.

  2. Ed says:

    Thanks, just what I needed

  3. Deepak says:

    Thanks Ed. I’m glad that you found this article helpful.

  4. Chandra says:

    It is great. Very helpful
    Thank you.

  5. Akshay says:

    It worked.
    Thanks !

  6. Bob says:

    Thank you for publishing this solution. I have tried several different offered solution and yours is the only one the worked the very first time. Great job!

  7. Deepak says:

    Bob, Thanks for your motivating comment.

  8. pgn674 says:

    This worked for me after I added
    using System.Runtime.InteropServices;
    Thanks for the how-to.

  9. OMFG says:

    You, sir, deserve a medal.

    I’ve been to 5 different sites where people invent the most cumbersome and enormous code to accomplish what you did in a simple and elegant manner.

    Thank you.

    Also thanks to pgn674 for the useful comment.

  10. Deepak says:

    OMFG, thanks and I gladly accept the medal :)

  11. Sambo says:

    Thanks Deepak, good work

  12. Pantelis says:

    Guys can someone transfer this to c++ ?

  13. John says:

    When closing the allocated console it causes the termination of the main application.
    Is there a way to prevent it?

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>