連載 .NETでWindowsアプリを作ろう

第3回 画像検索ツール本体をマルチスレッドで作ろう

デジタルアドバンテージ 遠藤 孝信
2005/10/29
Page1 Page2 Page3 Page4

■サムネイル画像コントロールの登録

 続いては、連載第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イベント・ハンドラを削除して、本番用の画面設計をしていきましょう。


 INDEX
  .NETでWindowsアプリを作ろう
  第3回 画像検索ツール本体をマルチスレッドで作ろう
    1.Google用プラグイン・プロジェクトの追加とテスト
  2.サムネイル画像コントロールの登録とテスト
    3.アプリケーションの画面設計とコーディング
    4.マルチスレッドによる検索処理
 
インデックス・ページヘ  「.NETでWindowsアプリを作ろう 」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間