記事内に広告が含まれています

【ワレコC#講座】Windows FormアプリケーションでConsoleウインドウに文字を出力する

この記事は約7分で読めます。
スポンサーリンク

ワテの場合、C#を使ってプログラミングを行う場合にはConsoleウインドウに各種の情報を書き出す事が多い。

 

特にデバッグ作業では、各種の変数の値を画面に書き出す事が多い。

デバッガでブレークさせて変数の中身を確認しても良いが、取りあえずはコンソールウインドウにズラズラと変数の中身を書き出すほうが手っ取り早いのでそうする。

ワテのこの癖は、昔はグラフィック出力が出来る端末も少なかったので、画面に出力出来るのは文字だけと言う経験が大いに関係していると思う。

それも全角の漢字や平仮名などは不可で半角の英数字のみしか出力出来ない時代もあった。

 

さて、そういうワテがC#を使ってWindows Formアプリを作成する場合にも、やはりConsoleに書き出したい。

当記事では、C#のWindows Formアプリでもコンソールに出力する方法を紹介したい。

では、本題に入ろう。

スポンサーリンク
スポンサーリンク

Windows Formアプリでもコンソールウインドウがあると便利

下図のようなWindows Formアプリケーションを実行した時に、同時にコンソールウインドウも開いておくと便利だ。

図1. C#で作成したWindows Formアプリケーション

 

ここでボタンをクリックすると下図のようにコンソールウインドウに文字を出力したい。

図2. C#で作成したWindows Formアプリケーションからコンソールウインドウを開く

 

このプログラムを即席で書いてみた。

Windows FormアプリケーションでConsoleウインドウに文字を出力する(その1)

using System;
using System.Windows.Forms;
 
namespace AddConsoleWinForms
{
    public partial class Form1 : Form
    {
        [System.Runtime.InteropServices.DllImport("kernel32.dll")] // この行を追加
        private static extern bool AllocConsole();                 // この行を追加  
 
        public Form1()
        {
            InitializeComponent();
            AllocConsole();                                        // この行を追加
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            var now = DateTime.Now;
            Console.WriteLine(now.ToString("yyyy年M月dd日(ddd)HH:mm:ss.fff"));
            Console.WriteLine(now.ToString("ggyyyy年MM月dd日(dddd)tthh時mm分ss秒"));
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Console.Clear();
        }
    }
}

コード1. C#のWindows Formアプリからコンソールを開いて文字出力するサンプル

 

この方法はワテが最初に覚えた方法だ。

VS2017になった今でも使える手法ではあるが、今ならこの後で紹介する「その2」の手法がお手軽である。

でもまあ、温故知新と言う言葉もあるので、旧式も覚えておくと何かの役に立つだろう。

コードの説明

まず、以下の2行をFormクラスの冒頭に挿入する。

  [System.Runtime.InteropServices.DllImport("kernel32.dll")] // この行を追加
  private static extern bool AllocConsole();                 // この行を追加  

kernel32.dll と言うのは Windows が持っている基本的なDLLであるが、その中にあるAllocConsole() と言う関数を使うための記述である。

詳しい事はワテも良く知らない。

兎に角、これを入れておくと良い。

 

次に、Form1のコンストラクタの中で、AllocConsole() を実行する。

  public Form1()
  {
       InitializeComponent();
       AllocConsole();                                        // この行を追加
  } 

これで無事にコンソールウインドウが開く。

あとは、普通に Console.WriteLine(…) を実行すれば良い。

Windows FormアプリでConsoleウインドウを開く別の方法(その2)

Windows Formアプリの場合、そのプロジェクトのプロパティを開くと下図のように出力の種類は Windowsアプリケーション だ。

図 Visual StudioのC#プロジェクトのプロパティ画面

それを コンソールアプリケーション に変更するだけでコンソールウインドウが出るようになる。

その1で説明した DllImport で kernel32.dll を読み込んで AllocConsole() を実行する必要もない。

なので、こちらの方法のほうが最初に説明した方法よりも簡単である。

 

ところで、昔からこのその2の方法は有ったのかな?

ワテの記憶が確かなら、昔はその1の方法しか無かったような気がするのだが、ワテの勘違いかも知れない。

コンソールウインドウの位置と大きさを決める方法

上で紹介した手法を使うとWindows Formアプリケーションの場合でも簡単にコンソールウインドウを表示する事が可能になる。

しかしながら、Windows Formウインドウも、コンソールウインドウも、その表示位置はWindowsが勝手に決める。

これがとっても煩わしいので、ワテの場合は、プログラムの起動時にコンソールウインドウの位置やサイズを画面の左端に移動するようにしている。

そうしておくとデバッグ作業もやり易いし。

その辺りの説明は、以下の記事を参考にして下さい。

【ワレコのC#講座】Visual Studio超初心者向け入門編 – C#のコンソールアプリを作る【1/10】

 

また、Windows Formアプリを実行した場合に、前回終了時のウインドウ位置や大きさを復元する手法もこの記事に書いていますので、参考にして下さい

【ワレコのC#】Formアプリ 前回終了時 ウインドウ位置・サイズを記憶復元

Visual StudioやC#プログラミング応用編 – ASP.NET MVC

ワテの場合、C#の勉強はコンソールプログラムから始めて、その次にWindows Formアプリを作った。

その後はWEBプログラミングを開始して、最初はASP.NET Web Formサイト、その次にASP.NET MVCのサイトを良く作っている。

2017年のゴールデンウイークを利用して、もう一つ便利なWEBサイトを作ってみた。

名付けて、

最安価格サーチ

クリックで開く

初回起動時のみ3秒くらい掛かりますがご了承下さい。

何が出来るかと言いますと、

Amazon.co.jp

楽天市場

ヤフーショッピング

の三つのショッピングサイトを同時検索して、商品を価格の安い順に表示出来ると言う、お買い物支援サイトです。

このサイトもASP.NET MVCで作っています。

サイトを運用しているのは、このサーバーです↓。

ABLENETレンタルサーバー

 

「最安価格サーチ」で、

「Visual Studioプログラミング」をかなり安値で探したい人は こちらから>

「C#プログラミング」をかなり安値で探したい人は こちらから>

もしお使い頂きまして何かご不明な点、改善案などありましたらお知らせ下さい。

まとめ

この記事では、Windows Formアプリケーションに於いて、コンソールウインドウを表示する手法を説明した。

デバッグ作業を行う上で、コンソールウインドウはとても役立つので、ワテの場合は必ず表示するようにしている。

 

もし本格的にC#を勉強するんなら、ネット情報に頼るよりもまずは本を読むのが良いと思う。

ネット情報だけだと、どうしても断片的な知識しか得られないので記憶に残りにくい。

一方、一冊本を読み通せばC#の全体像が掴めるので、バランスよく学習出来るだろう。

C#の本を買う

 

スポンサーリンク
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

C#
スポンサーリンク
シェアする
warekoをフォローする
スポンサーリンク

コメント