|  |  | 
 
| 連載 .NETでWindowsアプリを作ろう第3回 画像検索ツール本体をマルチスレッドで作ろうデジタルアドバンテージ 遠藤 孝信2005/10/29
 |  | 
| 
 | 
■サムネイル画像コントロールの登録
 続いては、連載第2回目で作成したサムネイル画像コントロールを今回のソリューションから使えるようにします。
 ここでは、第2回目で作成済みのサムネイル画像コントロールのプロジェクト(C#版、VB.NET版)のzipファイルを展開し、ソリューション・ファイルである「ThumbViewerControl.sln」を開きます。そしてVS.NETが起動したらビルドを行ってください。これにより「ThumbViewerControl.dll」が出来上がります。このDLLファイルさえできれば、こちらのVS.NETは不要ですので閉じてください。
 次に、いまビルドしたコントロール(ThumbViewerControl.dll)をツールボックスに登録します。アプリケーション本体の方のVS.NETに戻り、ツールボックスを右クリックして[アイテムの追加と削除]を実行すると以下のようなダイアログが表示されます。
 
|  | 
 
| ツールボックスにコントロールを登録するためのダイアログ | 
 
| ツールボックスを右クリックして[アイテムの追加と削除]を実行して開く。ここで[参照]ボタンをクリックし、ThumbViewerControl.dllを選択する。 | 
 ここで右下にある[参照]ボタンをクリックして、いま作成したThumbViewerControl.dllを選択します。これにより、以下の画面のようにツールボックスにサムネイル画像コントロールである「ThumbViewer」が登録されているはずです。
 
|  | 
 
| ツールボックスに登録されたサムネイル画像コントロール | 
 
| ここではツールボックスの[マイ・ユーザー・コントロール]タブにコントロールを登録した。 | 
 このようにしてツールボックスに登録しておくと、コントロールをドラッグ&ドロップしてフォームに配置できるようになります。
■サムネイル画像コントロールのテスト
 ここでサムネイル画像コントロールもテストしておきましょう。
 先ほどと同様に、System.Net名前空間とSystem.IO名前空間への参照をコードの先頭部分に追加してから、まず画像ダウンロードのための次のメソッドを記述します。
| 
 
| public static Image downloadImage(string url){
 Image img = null;
 WebClient wc = null;
 Stream st = null;
 
 try
 {
 wc = new WebClient();
 st = wc.OpenRead(url);
 img = Image.FromStream(st);
 }
 catch {}
 finally
 {
 if (st != null)
 st.Close();
 if (wc != null)
 wc.Dispose();
 }
 return img;
 }
 |  
 
| Public Shared Function downloadImage(ByVal url As String) As ImageDim img As Image = Nothing
 Dim wc As WebClient = Nothing
 Dim st As Stream = Nothing
 
 Try
 wc = New WebClient
 st = wc.OpenRead(url)
 img = Image.FromStream(st)
 Catch ex As Exception
 Finally
 If Not st Is Nothing Then
 st.Close()
 End If
 If Not wc Is Nothing Then
 wc.Dispose()
 End If
 End Try
 Return img
 End Function
 |  | 
 
| 指定されたURLの画像をダウンロードするメソッド(上:C#、下:VB.NET) | 
| このメソッドは、パラメータで指定されたURLにある画像を読み取り、画像オブジェクトであるImageオブジェクト(System.Drawing名前空間のImageクラスのオブジェクト)を作成して返す。パラメータurlで示されるURLにある画像が存在しない場合(ダウンロードに失敗した場合)にはnull(VB.NETではNothing)を返す。 | 
 次に、ツールボックスからサムネイル画像コントロールとボタンを次の画面のように配置します。
 
|  | 
 
| ボタンとサムネイル画像コントロールを配置したフォーム | 
 そして、配置したボタンをダブルクリックして次のようなコードを記述します。
| 
 
| private void button1_Click(object sender, System.EventArgs e){
 IWebImage google = new GoogleImage();
 
 foreach (WebImage wi in google.GetImages("c#"))
 {
 thumbViewer1.Add(downloadImage(wi.SmallImageURL));
 }
 }
 |  
 
| Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim google As IWebImage = New GoogleImage
 
 For Each wi As WebImage In google.GetImages("c#")
 ThumbViewer1.Add(downloadImage(wi.SmallImageURL))
 Next
 End Sub
 |  | 
 
| 配置したボタンのイベント・ハンドラ(上:C#、下:VB.NET) | 
| 画像を検索し、その結果をサムネイル画像コントロールに追加する。 | 
 実行してボタンをクリックすると、実際に検索が行われて次の画面のようにサムネイル画像が表示されればOKです。
 
|  | 
 
| 上記コードの実行例 | 
 
| ボタンをクリックすると検索が行われ、サムネイル画像が一覧表示される。 | 
 冒頭で述べたように、すべてのサムネイル画像が表示されるまでアプリケーションが固まったままになっていることも確認できると思います。
 以上で準備は完了です。いま配置したコントロールとボタンのClickイベント・ハンドラを削除して、本番用の画面設計をしていきましょう。
 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間