C#で作るWindowsアプリ
−のっぺらぼうのウインドウ−


[トップ] [目次] [次→]

はじめに

「C#でWindowsアプリを作ってみよう」って趣旨です。けど、C#言語自体の説明はあんまりしません。 まぁ、C++やJavaを知ってればだいたいわかるでしょう、って程度です(単に横着してるだけですが)。 VB6しか知らないって場合はちょっとつらいかなぁ? まぁ、C#言語の入門は書籍やWebにいろいろありますので適当にあさってみてください。


C#できる開発環境を作る

.NET Framework SDKを使います。こいつはここから ダウンロードできます。
.NET Framework SDKにはVB.NETやC#のコンパイラなど開発に必要なものが一式ついてます。 GUIなデバッガまでついてます。 なので、こいつを使えばVisual Studio.NETなんか買わなくてもC#できます (ただし、コンパイラもコマンドラインで使うことになりますし、やっぱりVS.NETのほうが便利なんですけどね)。

で、.NET Framework SDKのセットアップですが、今時点では英語版しかありません。 けど、日本語版のWindows 2000 Professional(SP2)に問題なくセットアップできましたし、問題なく使えてます。
.NET Framework SDKをセットアップする前に、

  1. IISを入れる(後からIISを入れた場合はSP2も当て直したほうがいいかも)
  2. セキュリティパッチを一通り入れる(とりあえずWindows Updateでいいでしょう)
  3. MDAC 2.7を入れる

くらいの準備をしておけば、大丈夫だと思います。


.NETな用語

.NETではいろいろと用語(略語)が増えてます。 Microsoft .NET Framework FAQ にまとめてくれてますので一度目を通しておくといいと思います。


のっぺらぼうのウインドウ

まず、コードを見てください。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

namespace Sample1 {
    using System;
    using System.Windows.Forms;
    
    public class MyForm : Form {
        // Main
        public static void Main(string[] args) {
            MyForm frm = new MyForm();
            Application.Run(frm);
        }
        
        // コンストラクタ
        public MyForm() {
            // 何もしない
        }
    }
}
Sample1.cs

ネームスペース

C#にはネームスペースってのがあります(日本語で書くと名前空間)。 C++、Javaのそれと同じと思っていいです(VB6にはこれに該当する機能はないと思ふ)。
1行目でネームスペースを定義してます。「こん中はSample1っていう名前だよー」って言ってると思ってもらえばいいです。

.NET Frameworkにはとてもたくさんのクラスがありますが、これらもネームスペースによってちゃんとジャンル分けされています。 NET Framework Class LibraryのReference (要するにドキュメント)を見てみてください(Referenceは、もちろん、.NET Framework SDKにもついてます)。 Microsoft.CSharpから始まってSystemとかSystem.Collectionsとかたくさん並んでると思いますが、 このそれぞれがネームスペース名です。
まぁ、この時点ではクラスを探しやすいようにジャンル分けするのがネームスペースと思ってもらってもいいでしょう。

逆に2行目、3行目のusingは「これからこのネームスペースを使うぞ」という宣言です。
本当は、クラスはネームスペース名+クラス名の全体で識別されます。 そういう書き方をしてみると


namespace Sample1 {
    public class MyForm : System.Windows.Forms.Form {
        // Main
        public static void Main(string[] args) {
            MyForm frm = new MyForm();
            System.Windows.Forms.Application.Run(frm);
        }
        
        // コンストラクタ
        public MyForm() {
            // 何もしない
        }
    }
}

こんな風になります。
FormやApplicationのところにSystem.Windows.Formsっていうネームスペース名がくっついてます。 毎回、こんなに長々と書くのは面倒なので、最初のソースのようにusingであらかじめ「○○を使うぞ」と宣言しておけばコンパイラが勝手に補ってくれるので楽チンってわけです。

すべてがクラス

.NET Frameworkにはプログラムを作る上で必要だと思われる、ありとあらゆるものがクラスとして用意されています。 そのまま使うものもあれば、継承して使うものもあります(「継承って何?」っていう人はオブジェクト指向の勉強をしてください)。

ウインドウを作るにはSystem.Windows.Forms.Formクラスを使います。 これを継承してメニューやらボタンやら必要なものをくっつけていくわけです。
今回のサンプルでは継承だけして何もしないのでのっぺらぼうのウインドウになります。 それでもFormクラスにウインドウの移動や終了などといった最低限必要なものはあらかじめ用意されているので、 それなりに動いてくれるわけです。

この「すべてがクラス」っていうのは、自分が作るコードにも言えます。 なので、VB6の標準モジュール(.bas)のようなグローバル関数やグローバル変数などといったものはありません (enumやstaticなプロパティ、メソッドを使えばほとんど同じことができますが)。

始まりはpublic static void Main(string[] args)から

.NETなWindowsアプリの実行はpublic static void Main(string[] args)から始まります。 これは、そういうもんだと思ってください。
MyFormクラスの中に書いてありますが、staticメソッドなのでどこに書いてあるかはあまり関係ありません。 で、8行目でMyFormクラスを生成して、9行目でApplication.Runに渡してます。
これも、そういうもんだと思ってください。メインウインドウ(今回はウインドウは1つきりなのでメインもへったくれもないですが)を Runに渡せば、それをオープンして実行してくれます。 もちろん、メインウインドウが終了すれば、Runから抜けてアプリケーションが終了します。

コンパイル

コマンドプロンプトで

csc /r:System.DLL /r:System.Windows.Forms.DLL Sample1.cs

とすればコンパイルすることができます。ちゃんとSample1.exeができあがっていると思います。
/rオプションはreference(参照)です。 C#コンパイラは、コンパイルするときにStringやらFormやらApplicatonやらといったクラスの情報を知る必要があります。 なので、それらのクラスが具体的にどのDLLに入っているのかを教えてあげる必要があるんです。 では、どのクラスがどのDLLに入っているかを自分はどうやって知ればいいのかってことになりますが、それは、クラスリファレンスにちゃんと書いてあります。
/rを忘れてコンパイルするとコンパイルエラーが出ますから、クラスリファレンスでDLL名を調べて追加してやればいいでしょう。 .NET Frameworkでは、だいたいネームスペース名とDLL名をあわせてあるようですが、必ずしも同じとは限りません。 全然違う名前にしても構わないですし、複数のネームスペースを1つのDLLにまとめたりもできます。 なので、リファレンスで確認するのが確実です。

さて、できあがったSample1.exeをダブルクリックすればちゃんとのっぺらぼうのウインドウが開くと思います。 ただ、いっしょにコマンドプロンプトまで開いてると思います。これは、

csc /t:winexe /r:System.DLL /r:System.Windows.Forms.DLL Sample1.cs

と/tオプションでWindowsアプリケーションだと教えてあげれば余計なコマンドプロンプトは開かなくなります。


[トップ] [目次] [次→]

株式会社ディーバ 青柳 臣一
2002/03/05