統一された開発スタイル
Windows アプリケーションや Web アプリケーションなど、エンド ユーザーが何らかの操作を行うことが主体となるアプリケーションを作成する場合、まずアプリケーションで必要となるユーザーインターフェイスを作成することから始めます。
Windows アプリケーションでは、先ほど紹介した Windows フォーム デザイナ上に、ボタンやテキストボックスなどのコントロールを配置してユーザー インターフェイスを作成していきます。
このコントロールに対して、エンド ユーザーは操作を行います。
Windows フォーム デザイナによる開発
[Windows フォーム アプリケーション] プロジェクト テンプレートを選択してプロジェクトを新規作成すると、そのプロジェクト内に Windows フォームを含むソース ファイルが自動生成されます。
前にも述べましたが、このようにフォーム上にコントロールを配置して、ユーザー インターフェイスを作成していく方法は、Visual Studio によるあらゆる開発で一貫しています。
Windows フォーム アプリケーションだけでなく、Web アプリケーションや WPF アプリケーションの場合も同様に、フォーム デザイナ上にドラッグ アンド ドロップでコントロールを配置しながら開発を進めていきます。
このようにして作成したフォームの中身は、実際には、Windows フォームなら VisualC# や Visual Basic などのコード、Web フォームなら HTML コード、WPF フォームなら XAML コードなどです。
したがって必要であれば、フォーム デザイナの表示をコード エディタの表示に切り替えて、そのフォームのコード内容を参照することも可能です。
特に Web フォームや WPF フォームの場合は、コードとフォーム デザイン画面を同時に表示することが可能になっています。
Web アプリケーションにおけるソースとデザインの同時表示
フォーム デザインによるユーザー インターフェイスの作成
[Windows フォーム アプリケーション] プロジェクトを新規作成後、[ソリューション エクスプローラ] ウィンドウ内にある Windows フォーム項目 (Visual Basic では「Form1.vb」、Visual C# では「Form1.cs」) をダブルクリックすると、中央のドキュメント ウィンドウに Windows フォーム デザイナが表示されます。
そこにフォームが開かれると、[ツールボックス] ウィンドウ内に配置可能なコントロール群やコンポーネント群が表示されます。
なお、前の「第 3 章 プロジェクトの作成」でも説明しましたが、[ツールボックス] ウィンドウが表示されていない場合は、メニュー バーから [表示] - [ツールボックス] を選択すれば表示されます。
[ツールボックス] ウィンドウ内のコントロールは、用途に応じて [コモンコントロール]、[コンテナ]、[メニューとツールバー] などのカテゴリごとに分類されています。
この中にあるコントロールを、マウスでフォーム上にドラッグ アンド ドロップすることで、アプリケーションに必要なコントロールをフォームに配置していきます。
Windows フォームで利用できる [レイアウト] ツール バー
[レイアウト] ツール バーでコントロールを揃える
コントロールの配置方法 (レイアウト モード) としては、「SnapLines」と「SnapToGrid」が選択できます。
この選択は、メニュー バーの [ツール] - [オプション] を選択して、[オプション] ダイアログ ボックスを表示し、その右側のカテゴリ ツリーから [Windows フォーム デザイナ] - [全般] を選択し、[レイアウト設定] 内の [LayoutMode] プロパティで変更できます。
デフォルトでは「SnapLines」が選択されています。
「SnapLines」の場合、コントロールをマウスでドラッグすると、ほかのコントロールの位置に合わせて位置を調整するためのガイドが表示されます。
一方、「SnapToGrid」を選択した場合は、フォーム上にグリッド (格子) が表示されるので、それに合わせてコントロールの位置を調整できます。
SnapLines 設定によるガイドの表示
SnapToGrid 設定によるグリッド表示
[プロパティ] ウィンドウでプロパティを設定する
前述したとおり [プロパティ] ウィンドウでは、コントロールの外観や振る舞いを調整するプロパティを設定できます。
フォーム デザイナ上でコントロールを選択すると、そのコントロールが持つプロパティが [プロパティ] ウィンドウに表示されますので、各プロパティ項目の値を選択変更したり、入力したりするだけです。
[プロパティ] ウィンドウによるプロパティ設定
タスク メニューによりプロパティを設定する
Windows フォームに配置するコントロールの中には、設定可能なプロパティ項目が非常に多岐にわたるものがあります。
このようなコントロールには、最もよく使われるプロパティ項目にのみすばやくアクセスするための手段が提供されています。
それがスマート タグから表示されるタスクメニューです。フォーム上に配置したコントロールの右上の部分にスマート タグが表示されます。
スマート タグをクリックするとタスク メニューと呼ばれるメニューが表示されます。コントロールに必要な設定をここから行うことが可能です。
スマート タグによるタスク メニューの表示
タブ オーダーを設定する
タブ オーダーは Windows フォーム上で Tab キーを押した際に、コントロールのフォーカスが移動する順番を指定するものです。
タブ オーダーを設定することにより、アプリケーションを利用するエンド ユーザーは、マウスでコントロールを選択しなくても、Tab キーを使ってコントロールを移動できるようになります。
タブ オーダーを設定するには、レイアウト ツール バーの「タブ オーダー」を使用します。
「タブ オーダー」ボタンをクリックすると、フォーム上に配置されたコントロールにタブ オーダーを示す数字が表示されます。
この状態で設定したいタブ オーダーの順番でコントロールを次々とクリックしていきます。
クリックされた順番で番号が振られていき、タブ オーダーがセットされます。
タブ オーダーの設定
ユーザー コントロールを作成する
通常、フォーム上に配置するコントロールには [ツールボックス] に標準で搭載されているものを使いますが、独自の「ユーザー コントロール」を作成して使うことも可能です。
ユーザー コントロールでは、複数のコントロールをまとめて 1 つのコントロールとしたり、まったく独自の機能を持つコントロールを作成したりできます。
ちなみに、標準のコントロールを拡張して独自の機能を加える、「カスタム コントロール」と呼ばれる独自のコントロールもありますが、これについては本書では説明を割愛します。
ユーザー コントロールを集めたライブラリを作成すれば、ほかのプロジェクトと共有して再利用することが可能です。このようなユーザー コントロール ライブラリを作成するには、[新しいプロジェクト] ダイアログ ボックスにある「Windows フォーム コントロールライブラリ」プロジェクト テンプレートを選択します (WPF アプリケーションの場合は「WPF カスタムコントロール ライブラリ」プロジェクト テンプレートを選択します)。
ユーザー コントロールの作成は基本的にはWindows フォームの作成とさほど変わりありません。作成したユーザー コントロールをビルドすると、[ツールボックス] ウィンドウに登録され、Windows フォームなどで利用できるようになります。
ユーザー コントロールの作成
入力補助機能、編集機能を活用したコーディング
ユーザー インターフェイス部分が出来上がれば、次にエンド ユーザーがコントロールを操作したときに実行される処理ロジックのコードを記述します。Visual Studio 2008 では、次に示すいくつかの機能を使ってスマートにコーディングが行えます。
コントロールのイベント処理を追加する
フォーム上に配置したコントロールに対してエンド ユーザーが何らかの操作を行うと、アプリケーション内部ではイベントが発生します。
そのイベントを処理するのがイベント ハンドラです。
たとえばフォーム上に配置したボタンが押されると、Click イベントが発生します。それを処理するのは Click イベント ハンドラです。
したがって、エンド ユーザーがクリックした際に何らかの処理を実行したいという場合には、この Click イベント ハンドラに処理コードを記述することになります。
実際に Click イベント ハンドラに処理コードを記述するには、フォームデザイナ上で Button コントロールをダブル クリックします。
すると、ドキュメントウィンドウがフォーム デザイナからコード エディタに切り替わり、そのフォームのコードに Click イベント ハンドラが自動的に追加されますので、そこにコードを追記してきます。
一方、そのほかのイベントに対応するイベント ハンドラを追加したい場合は、フォーム デザイナ上でコントロールを選択した状態で [プロパティ] ウィンドウの上部にある「稲妻」ボタンをクリックしてイベント一覧を表示し、そこからそのイベント名をダブル クリックすることで、イベント ハンドラが追加されます。
たとえば、ボタンのフォーカスが外れた際に特別な処理が必要となる場合では、”Leave” イベント ハンドラを作成します。
[プロパティ] ウィンドウによるコントロールの
イベント ハンドラの追加
IntelliSense による入力候補を活用する
Visual Studio 2008 ではプログラマーのキー入力をできるだけ少なくし、効率をあげるための機能がいくつか用意されています。
IntelliSense (インテリセンス) はその 1 つで、コーディング時のキーボード入力を補完してくれる機能です。キー入力を行っていると、その入力内容に応じて入力候補の一覧が表示されます。
オブジェクトのメソッドやプロパティ、プロジェクト内で定義しているクラスのフィールド変数などが、入力候補として表示されます。
IntelliSense による入力候補の表示
コード スニペットにより定型コードを入力する
さらに、プログラミング言語の構文を簡単に入力したい場合はコード スニペットが利用できます。
たとえば foreach ステートメントを入力する場合、キーボードから "foreach" というコード スニペットのキーワードを入力し Tab キーを 2 回押すと、foreach ステートメントが次のように挿入されます (次のコードは Visual C# の例)。
スニペットのキーワードも、IntelliSense の入力候補に表示されます (次の画面は Visual Basic の例)
コード スニペットの挿入
もう 1 つのコード スニペットの入力方法は、コード エディタで右クリックすると表示されるコンテキスト メニューから [スニペットの挿入] を選択します。IntelliSense に似た入力候補の一覧が表示されるので、そこから目的のコード スニペットを選択すればそのスニペットのコードが挿入されます。
スニペットのコードが入力されると、色付けされた部分が表示されることがありますが、ここは開発者が現在の文脈に合わせて書き換えるカスタム部分になります。たとえば次の画面の例では "Item" や "String" などがカスタム部分です。
このカスタム部分へは Tab キーにより移動できます。
Visual Studio 2008 では、以上のようなユーザー インターフェイスのデザイン機能、コードの入力候補機能や編集機能を活用することで、開発生産性を高めることができます。
スニペットのコードのカスタム部分の書き換え
DLL サービスへの参照設定
アプリケーションの規模が大きくなると、機能を複数のライブラリ (DLL) に分けることがあります。
場合によっては、ソフトウェア会社が提供する商用パッケージの特別なライブラリを使用することがあるかもしれません。
また、新規にアプリケーションを作成した場合においても、.NET Framework のすべてのライブラリが読み込まれるのではなく、必要最低限のものに限定されています。
このような場合において、これら外部ライブラリの機能をアプリケーションが使用するには参照設定を行う必要があります。
参照設定を行う場合には、[ソリューション エクスプローラ] ウィンドウのプロジェクト項目を右クリックし、表示されるコンテキスト メニューから [参照の追加] を選択します。
.NET Framework のライブラリを追加するには、[.NET] タブより該当のアセンブリを追加します。
COM インターフェイスのライブラリを追加するには、[COM] タブを、同一プロジェクトに読み込まれているライブラリを参照する場合[プロジェクト] タブを選択します。
参照するライブラリ ファイルが特定のフォルダに格納されている場合、[参照] タブを選択して、該当のファイルを選択します。
また、外部の機能をライブラリではなく、Web サービスなどのサービスとしてアプリケーションで利用する場合、[ソリューション エクスプローラ] ウィンドウのプロジェクト項目を右クリックし、表示されるコンテキスト メニューから [サービス参照の追加] を選択します。
(サービス連携の詳細については本書では割愛します。)
参照の追加
では次に、ソース コードが完成した後に行うビルド作業について説明します (「第 5 章 ビルド」)。その説明に入る前に、プロジェクトの詳細設定を行う方法について紹介しておきます。
プロジェクトのプロパティ
プロジェクトの詳細設定は、プロジェクトのプロパティで行います。
プロジェクトのプロパティは、[ソリューション エクスプローラ] ウィンドウのプロジェクト項目を右クリックし、表示されるコンテキスト メニューから [プロパティ] を選択することで表示されます。
[ソリューション エクスプローラ] ウィンドウに、(Visual C# では) 「Properties」もしくは (Visual Basic では)「My Project」が表示されている場合には、これをダブル クリックしてもプロジェクトのプロパティを開けます。
Visual Studio 2008 では、プロジェクトのプロパティはプロジェクト デザイナとして中央のドキュメント ウィンドウに表示されます。
プロジェクトのプロパティでは、プログラミング言語や作成するアプリケーションに応じてさまざまな設定が行えます。
プロパティの内容はカテゴリ分けされており、左側に並んだタブを選択して、それぞれのページで設定を行います。各タブのページの主な内容について説明します。
プロジェクトのプロパティ設定が行えるプロジェクト デザイナ
[アプリケーション] タブ
[アプリケーション] タブでは、「アセンブリ名の指定」、「名前空間」、「アプリケーションのアイコンの指定」 などが行えます。
プロジェクトに複数の Windows フォームが含まれている場合、どのフォームを最初にアクティブにするかといった指定も行えます。
なお、(本書でこれまで何度か登場している) アセンブリとは、.NET Framework が生成するプログラム ファイル (.exe ファイルや .dll ファイル) のことです。
[コンパイル] タブ/[ビルド] タブ
[コンパイル] タブ (Visual Basic の場合) および [ビルド] タブ (Visual C# の場合) では、Debug 版 (後述する「デバッグ」の際のモード) と Release 版 (プログラムを正式にリリースする際のモード) といったビルドの構成や、ビルド時のコンパイル オプションなどを指定します。
また、ターゲットとする .NET Framework のバージョンも「2.0」「3.0」「3.5」のいずれかを選択できます (Visual C# の場合は、.NET Framework のバージョンの選択は [アプリケーション] タブで行います)。
[コンパイル] タブ/ [ビルド] タブについては、「第 5 章 ビルド」の「コンパイラの詳細設定を行う」で詳しく紹介します。
また、Debug 版と Release 版の違いについては、「第 5 章ビルド」の「Debug ビルドと Relase ビルドの違い」でもう少し詳しく説明します。
[ビルド イベント] タブ (Visual C# の場合のみ)
プロジェクトをビルドする前や後に実行する任意の処理をコマンドラインとして指定します。
さらにビルド後の処理では、ビルド結果によって処理を実行するかどうかも指定できます。
たとえば、ビルドが成功したときに生成されたアセンブリをファイル サーバーにコピーしたり、ビルドが失敗したときに担当者にエラー通知を送信したりといった、任意のコマンドが設定できます。
Visual Basic にはこの [ビルド イベント] というタブはありませんが、[コンパイル] タブに [ビルド イベント] というボタンが用意されていますので、そこからビルド時に実行するコマンドを指定できます。
[デバッグ] タブ
[デバッグ] タブでよく利用する項目は、デバッグするアプリケーションでの起動パラメータの指定です。
[デバッグ] タブについては、「第 6 章 デバッグ」の「デバッグの設定」で詳しく紹介します。
[リソース] タブ
[リソース] タブでは、アプリケーションで使用する文字列や画像、アイコンなどのリソースを管理します。
[サービス] タブ
[サービス] タブでは、アプリケーションで「クライアント アプリケーション サービス」を使用するための設定を行います。
クライアント アプリケーション サービスは、Windows フォーム アプリケーション WPF アプリケーションから ASP.NET が提供する認証やプロファイリング サービスを使うためのものです。
[設定] タブ
[設定] タブは、アプリケーション設定 (app.config) の内容を編集するためのものです。
ここで設定した項目はテキスト形式の設定ファイルに保存され、たとえばアプリケーションの完成後であっても環境に応じて設定を変更することが可能です。
設定した内容は Settings オブジェクト(Visual C# の場合) や MySettings オブジェクト (Visual Basic の場合) などを使ってアプリケーションから簡単に参照できます。
[設定] タブのページ
[署名] タブ、[セキュリティ] タブ、[発行] タブ
[署名] ページではプロジェクトで作成するアセンブリに署名を設定します。署名を行うとファイルの改ざんなどが防止できるため、セキュリティが向上します。また、[発行] ページではClickOnce によるプログラムの配置が行えます。
[セキュリティ] ページでは ClickOnce で配置するアプリケーションでどのような機能を許可するかを定めるコード アクセス セキュリティの内容を設定できます。
それではビルドについて説明します。
[発行] タブのページ
foreach (var item in collection) {
}