|
|
連載 .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 Image
Dim 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.Click
Dim 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 記事ランキング
本日
月間