マイクロソフト株式会社 デベロッパーマーケティング本部
デベロッパーエバンジェリスト 佐藤 直樹

最終更新日 2004 年 3 月 31 日

このコンテンツのポイント
  • ドラッグ アンド ドロップによるデザイン
  • ネットワークへの接続状況を確認する方法
  • 例外処理ステートメントの利用方法
 

今回紹介するコード

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
    Try
        ' デバイス名を取得します
        Dim HostName As String = Dns.GetHostName()
        ' インターネットホストアドレス情報を取得します
        Dim ThisHost As IPHostEntry = Dns.GetHostByName(HostName) 
        ' IP アドレスを文字列として取得します。IP アドレスが複数割り当てされている
        ' 場合もありますが、本サンプルでは最初のそれを取得することにします。
        Dim ThisIpAddr As String = ThisHost.AddressList(0).ToString()
        ' ローカルループバックアドレスの割り当てを確認します。(IPv4)
        ' 割り当てられていない場合、ネットワークに接続していることになります。
        Dim bConnectivity As Boolean = _
          Not (IPAddress.Parse("127.0.0.1").ToString().Equals(ThisIpAddr))
        MessageBox.Show("host=" + HostName + ", IP=" + ThisIpAddr + ", [" _
          + bConnectivity.ToString() + "]")
   ' ネットワークカードの急な取り外し、ネットワーク on/off により例外が発生する場合があります。
   Catch ex As Exception
        MessageBox.Show("例外が発生しました。:" + ex.Message)
End Try
End Sub
 

 

目次
はじめに
スマートデバイスアプリケーションの開発準備
Windows フォームとの相違点
画面をデザインする
コードを実装する
エミュレータで実行する
おわりに
注釈

Visual C# .NET の内容はこちらに掲載しています。
10 行でズバリ !! モバイル向けリッチクライアントの開発 (C#)


  

はじめに

.NET Compact Framework は Pocket PC/ Windows Mobile を代表とする Windows CE をベースとしたデバイスを対象に .NET Framework の恩恵をもたらします。
.NET Compact Framework でのアプリケーションの構築には Windows フォーム、ASP.NET と同様に Visual Studio .NET 2003 を使用します。これにより、高機能で操作性の高いアプリケーションを実現していくことができます。
では、その例を簡単に見ていくことにしましょう。

 

スマートデバイスアプリケーションの開発準備

Visual Studio .NET 2003 を起動して、新規にプロジェクトを作成します。
言語は、皆さんの得意とされているものを選択するとよいでしょう。ここでは、Visual Basic .NET を選択し、"スマート デバイス アプリケーション" テンプレートを選択しています。"プロジェクト名" テキストボックスに名称を入力したら "OK" ボタンをクリックします

図 1. スマートデバイスのためのプロジェクトを新規に作成

 

スマートデバイスアプリケーションウィザード (*1) が表示されるので、ターゲットデバイスに "Pocket PC"、プロジェクトに "Windows アプリケーション" を選択し "OK" ボタンをクリックします。
これで Pocket PC をターゲット OS にした Windows フォームでの開発準備が完了しました。

図 2. デバイスとプロジェクトの設定

 

Windows フォームとの相違点

フォームのデザインは、.NET Framework の Windows フォームと同様に、ドラッグ アンド ドロップという一貫性のある手順で行うことができます。
画面左側 (*2) に表示されている "ツール ボックス" から [デバイス コントロール] を選択すると、いくつかのアイコンが表示されます。このアイコンが画面のための要素になっています。これをコントロールと呼びます。
表示されるデザイン画面に目を移すと、通常の Windows フォームのデザイン画面と少々異なることに気が付く (図 3.) のではないでしょうか。デバイスの既定の解像度に応じた Windows フォームが表示されています。また、デバイス開発用のツールバーも表示されているのがわかります。

図 3. デバイス向けのデザイン画面

 

画面をデザインする

図 4. では、Command コントロールを配置しています。コントロールには、名称やフォントサイズ、大きさなどさまざまな設定を行うことができます。これらの設定を行うためには、画面右下 (*2) に表示される [プロパティ] ウィンドウを利用します。

図 4. デバイス向けのデザイン画面

 

コードを実装する

Windows フォームのアプリケーションなのでコントロールに対しての必要な設定が完了した後は、アプリケーションとして必要になるコードを記述します。
Windows フォームでは、アプリケーションの利用者の操作に応じてコードが実行されるというイベント駆動型のプログラミングスタイルを採用しています。たとえばボタンがクリックされたときの操作に対応したコードを記述するためには、そのボタンの Click イベントにコードを実装するという考え方になります。
Pocket PC はデスクトップ PC 等と違い、常時ネットワークに接続しているとは限りません。そのため、ネットワークへの接続状況の確認がプログラム上発生することが少なくありません。
ここでは、System.Net 名前空間のクラスを用いてホスト名としてのデバイス名を取得し、デバイスに対する IP アドレスの割り当て状況によりネットワークへの接続確認を行うことにします。
まずは、Imports ステートメントで System.Net 名前空間をインポートし、Dns クラスなどを直接参照できるようにします。

Visual Basic
Imports System.Net // この行を追加

Public Class Form1
    Inherits System.Windows.Forms.Form
    Friend WithEvents Button1 As System.Windows.Forms.Button 
<以下略>
 

続いてボタンの Click イベントにコードを実装します。

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles Button1.Click
    Try
        ' デバイス名を取得します
        Dim HostName As String = Dns.GetHostName()
        ' インターネットホストアドレス情報を取得します
        Dim ThisHost As IPHostEntry = Dns.GetHostByName(HostName) 
        ' IP アドレスを文字列として取得します。IP アドレスが複数割り当てされている
        ' 場合もありますが、本サンプルでは最初のそれを取得することにします。
        Dim ThisIpAddr As String = ThisHost.AddressList(0).ToString()
        ' ローカルループバックアドレスの割り当てを確認します。(IPv4)
        ' 割り当てられていない場合、ネットワークに接続していることになります。
        Dim bConnectivity As Boolean = _
          Not (IPAddress.Parse("127.0.0.1").ToString().Equals(ThisIpAddr))
        MessageBox.Show("host=" + HostName + ", IP=" + ThisIpAddr + ", [" _
          + bConnectivity.ToString() + "]")
   ' ネットワークカードの急な取り外し、ネットワーク on/off により例外が発生する場合があります。
   Catch ex As Exception
        MessageBox.Show("例外が発生しました。:" + ex.Message)
End Try
End Sub
 

なお、
Dim ThisHost As IPHostEntry = Dns.GetHostByName(HostName)
の呼び出し時にネットワークケーブル抜けなどの接続状況のあり・なしの変化により例外が発生することがあります。そこで try-catch ステートメントを利用して発生する例外を try 句でキャッチします。

エミュレータで実行する

イベントのコードの記述が完了したら、実行してみましょう。
アプリケーションを実行させるには [F5] キーを押すか、[デバッグ] メニューから [開始] をクリックします。すると配置先を選択するダイアログが表示されます。(図 5.)

図 5. 配置先を選択するダイアログが表示

 

ActiveSync 経由で接続された Pocket PC デバイスでの確認もできますが、まずはエミュレータを選択してみましょう。するとエミュレータ起動して、作成したアプリケーションが表示されます。(図 6.)

図 6. エミュレータでの実行

 

また、イベントを記述したボタンをクリックすると、図 7. のようにメッセージボックスが表示され、そこにはホスト名、IP アドレス、接続状態が出力されます。エミュレータはホスト側 PC からプライベート IP アドレスが割り当てられるため接続状態となります。また、ActiveSync 経由で実機を接続した場合も同様に IP アドレスが割り当てられるため同様です。なお、ネットワークからはずした状態での実行結果は図 8. のようになります。

図 7. ホスト名、IP アドレスなどがメッセージ出力

 

図 8. ループバックアドレスがメッセージ出力

 

おわりに

このように Visual Studio .NET 2003 を使用することによって、より簡単にモバイルデバイス向けの Windows フォームアプリケーションを作成することができます。そしてその開発は、通常の Windows フォームやWeb フォームといった他のアプリケーションと同じスタイルで行うことが可能です。つまり、デスクトップアプリケーションの開発知識をそのままモバイルデバイス向けアプリケーションを作成することが可能です。
関連するコンテンツなどを参考にしながら、ぜひ、.NET Compact Framework を使用したモバイル端末向け Windows フォームの開発にチャレンジしてみて下さい。

 

注釈

*1 : 画面右側の表示項目について
"Windows Mobile 2003 software for Pocket PC 日本語版 ソフトウェア開発キット(SDK)" を導入した環境では、配置先対象が複数表示されます。ターゲットデバイスに "Pocket PC" を選択した場合の既定値は、「Pocket PC デバイス」、「Pocket PC 2002 エミュレータ」の 2 種類です。

*2 : 画面上の位置について
各サブウィンドウの位置は、Visual Studio .NET 2003 のセットアップ終了後に標準的に配置されている場所を示しています。これらのウィンドウやツールボックスは、ドラッグ アンド ドロップによって画面上の任意の位置に配置して、開発をされる皆さんが利用しやすい場所へ移動することができます。
もし画面上のどこにも見当たらないときは、[表示] メニューをクリックし、該当ウィンドウのメニューをクリックするか、同じく [表示] メニューをクリックし、[その他のウィンドウ] サブメニューから選択することで再度画面上に表示させることができます。

 


Code Recipe .NET Framework デベロッパー センター

ページのトップへ