ListViewコントロール

Similar documents
グラフィックス

VB.NET解説

ICONファイルフォーマット

NotifyIconコントロール

データアダプタ概要

Userコントロール

正規表現応用

ハッシュテーブル

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

ファイル操作-インターネットキャッシュ

ブロック パニック

ファイル監視

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

プロセス間通信

データベースプログラミング

ルーレットプログラム

プラグイン

ファイル操作

ファイル操作-バイナリファイル

構造体

ブロック崩し風テニス

3D回転体プログラム

グラフィックス 目次

VFD256 サンプルプログラム

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

DAOの利用

パラパラ漫画

VB実用⑦ エクセル操作Ⅰ

アプリケーション

Microsoft Excel操作

mySQLの利用

スレッド操作 タイマー

ウィンドウ操作 応用

インベーダープログラム

グラフィックス 目次

印刷

VB実用Ⅲ⑩ フリーデータベースⅡ

データベースⅠ

ICONファイルフォーマット

GUIプログラムⅣ

メール送信

64bit環境で32bitコンポーネントの利用

占領双六ゲーム

画像閲覧プログラム

VB.NET解説

データベース1

データグリッドビュー

Prog2_15th

WebBrowserコントロール

回文作成支援プログラム

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

3D回転体プログラム

印刷

パラパラ漫画

VB実用⑬ 印刷Ⅲ(PrintFormメソッド)

Prog2_12th

モグラ叩きプログラム

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

データベースプログラミング

Socketクラス

神経衰弱ゲーム

ドッグファイト

Microsoft Word 練習問題の解答.doc

スライド 1

構造体

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

正規表現概要

キー操作

エクセル詳細 アドイン

Microsoft Word -

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

GUIプログラムⅡ

回文作成支援プログラム

データベースⅠ

Secure iNetSuite for .NET 4.0Jの新仕様について

かべうちテニス

C#の基本

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 ゲームプログラミング スプライト スプライト Pygame では pygame.sprite を用いる事でスプライトの管理 描画 衝突判定等を簡単に行う事が出来る 此れを利用してキャラクター操作に関する各種機能をスプライトクラスとして 1 個

MS Office オートメーション

MISAO with WPF

Java - Visual Editor

プロシード

Msako技術資料 

アセンブラ C# で作られたプログラムをデコンパイル デコンパイルとは 大雑把に言うと コンパイルされたプログラム (exe dll 等 ) から 元のコードを復元する行為の事で有る 特に C# や Java の様に中間言語に翻訳された状態でコンパイルされる様な言語の場合は元のコードに可成り忠実に復

相性占いプログラム

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

正規表現

データグリッドビュー

シングルドキュメントの作成 新しいプロジェクトで MFC アプリケーションを選択すると アプリケーションの種類のオプションのダイアログが開くので アプリケーションの種類にシングルドキュメントを選択して 次へボタンをクリックする ( 此処で完了ボタンをクリックしても構わないが 不要なフレームペインを取

VB実用③ アクセス操作Ⅰ

プラグイン

回文作成支援プログラム

WebReportCafe

VB実用① データベースⅠ

チャットプログラム

万年暦プログラム

C 資料 電脳梁山泊烏賊塾 キャスト C++ のキャスト 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する C++ でのキャスト

Transcription:

ListView コントロール ListView コントロールへ項目を追加 本稿では.NET Framework の標準コントロールで有る ListView コントロール (System.Windows.Forms 名前空間 ) を活用する為に ListView コントロールにデータを追加する方法を紹介する ListView コントロールは データ項目をアイコン表示や詳細表示等に依り一覧表示する為の物で Windows のエクスプローラでも馴染みのコントロールで有る 其の表示スタイルと仕ては 次の様な 4 種類が用意されている ListView コントロールの 4 つの表示スタイル左から順番に 大きなアイコン (LargeIcon) 小さなアイコン (SmallIcon) 一覧 (List) 詳細 (Details) と謂う表示に成って居る 詳しくは MSDN View 列挙体 を参照され度い 詳細表示では 1 つのデータ項目に付き複数の種類の情報を列毎に表示出来る 各列の値に依りデータ項目の並べ替えも可能で有る ListView コントロールのヘッダ項目の作成 此処では ListView コントロールへ実際のデータを追加する前に 先ずは ListView コントロールのヘッダ項目を作成する事にする 猶 上記 4 種類の表示スタイルの内 ヘッダ項目が表示されるのは ListView コントロールの View プロパティが View 列挙体 (System.Windows.Forms 名前空間 ) の Details( 詳細表示 ) に設定されて居る時而巳で有る ヘッダ項目を作成するには ListView コントロールの Columns プロパティの Add メソッド若しくは AddRange メソッドを使えば良い 複数のヘッダ項目を作成し度い場合には 複数を纏めて追加出来る AddRange メソッドが便利で有る 併し 本稿のサンプルプログラムは 記述が簡単な Add メソッドを利用する事にする (AddRange メソッドを使用する方法は コメントアウトして居る ) AddRange メソッドのパラメータには ColumnHeader オブジェクト (System.Windows.Forms 名前空間 ) の配列を指定する 1 つの ColumnHeader オブジェクトが 1 つのヘッダ項目に対応する 具体的なサンプルコードは 以下の通りで有る 此処ではヘッダ項目と仕て 3 つの列を設定して居る ' ListView コントロールを初期化するジェネラルプロシージャ Private Sub InitializeListView( ) ' ListView コントロールのプロパティ設定 With lsvdisp -1-

.FullRowSelect = True.GridLines = True.Sorting = SortOrder.Ascending.View = View.Details End With ' 列 ( コラム ) ヘッダの作成 lsvdisp.columns.add( " 名前 ", 100, HorizontalAlignment.Left ) lsvdisp.columns.add( " 種類 ", 60, HorizontalAlignment.Left ) lsvdisp.columns.add( " データ ", 150, HorizontalAlignment.Left ) ' 下記の様に AddRange メソッドを用いる方法も有る ' Dim C1 As ColumnHeader = New ColumnHeader( ) ' Dim C2 As ColumnHeader = New ColumnHeader( ) ' Dim C3 As ColumnHeader = New ColumnHeader( ) ' C1.Text = " 名前 " : C1.Width = 100 ' C2.Text = " 種類 " : C2.Width = 60 ' C3.Text = " データ " : C3.Width = 150 ' Dim CA( ) As ColumnHeader = C1, C2, C3 ' lsvdisp.columns.addrange( CA ) // ListView コントロールを初期化するメソッド private void InitializeListView( ) // ListView コントロールのプロパティ設定 lsvdisp.fullrowselect = true; lsvdisp.gridlines = true; lsvdisp.sorting = SortOrder.Ascending; lsvdisp.view = View.Details; // 列 ( コラム ) ヘッダの作成 lsvdisp.columns.add( " 名前 ", 100, HorizontalAlignment.Left ); lsvdisp.columns.add( " 種類 ", 60, HorizontalAlignment.Left ); lsvdisp.columns.add( " データ ", 150, HorizontalAlignment.Left ); 上記コードの詳細説明は割愛するが 最初に ListView コントロールのプロパティ設定で 行選択モード (FullRowSelect プロパティ ) グリッド線表示 (GridLines プロパティ ) ソート機能 (Sorting プロパティ ) 詳細表示 (View プロパティ ) の設定を行って居る 更に続けて列 ( コラム ) ヘッダの作成で 名前 ( 列幅 :100) 種類 ( 列幅 :60) データ ( 列幅 :150) と謂う 3 つのカラムを Add メソッドに依りヘッダ項目と仕て登録して居る 此処では コードに依りヘッダ項目の実装を行ったが Visual Studio の IDE の [ プロパティ ] ウィンドウに有る Columns プロパティ からは GUI に依り簡単に設定する事も出来る ListView コントロールへのデータの追加 次に ListView コントロールへ実際のデータを追加する事にする 此れには ListView コントロールの Items プロパティの Add メソッド若しくは AddRange メソッドを使えば良い 此れに関しても複数を纏めて追加するには AddRange メソッドを使う 本稿のサンプルコードでは データを 1 個宛登録するので Add メソッドを使用する -2-

Add メソッドのパラメータには ListViewItem オブジェクト (System.Windows.Forms 名前空間 ) を指定する 1 つの ListViewItem オブジェクトが 1 つのデータに対応する 先程のサンプルコードでは 3 つの列項目を作ったが 此の場合には 1 つのデータには 3 つの文字列項目が存在する事に成る 依って ListViewItem オブジェクトには 3 つの文字列データを含める必要が有る 此れを実現するには ListViewItem クラスのコンストラクタのパラメータで 其等を配列と仕て指定すれば良い 具体的には 以下の様なサンプルコードに成る ' ListView コントロールのデータを更新するジェネラルプロシージャ Private Sub RefreshListView( ) ' ListView コントロールの総てのデータを消去 lsvdisp.items.clear( ) ' ListView コントロールにデータを追加 Dim Item1( ) As String = " リンゴ ", " 果物 ", " 赤 " lsvdisp.items.add( New ListViewItem( Item1 )) Dim Item2( ) As String = " メロン ", " 果物 ", " 緑 " lsvdisp.items.add( New ListViewItem( Item2 )) Dim Item3( ) As String = " ピーマン ", " 野菜 ", " 緑 " lsvdisp.items.add( New ListViewItem( Item3 )) // ListView コントロールのデータを更新するメソッド private void RefreshListView( ) // ListView コントロールの総てのデータを消去 listview1.items.clear( ); // ListView コントロールにデータを追加 string[ ] item1 = " リンゴ ", " 果物 ", " 赤 " ; lsvdisp.items.add( new ListViewItem( item1 )); string[ ] item2 = " メロン ", " 果物 ", " 緑 " ; lsvdisp.items.add( new ListViewItem( item2 )); string[ ] item3 = " ピーマン ", " 野菜 ", " 緑 " ; lsvdisp.items.add( new ListViewItem( item3 )); 上記のコードに有る Items プロパティの Clear メソッドは 既存のデータ項目を総て消去する為の物で有る 以上のサンプルプログラムを実行したのが次の画面で有る ListView コントロールの詳細表示は DataGridView コントロールに依るデータ一覧表示に似て居るが DataGridView コントロールとは異なり コントロール内で直接 データの編集を行う事は出来ない 其の分 軽量なので データを表示する丈で 編集する必要の無い時は ListView コントロールを使用した方が良い -3-

ListView コントロールでサムネイル画像を一覧表示 4 種類の表示スタイルを持つ ListView コントロール (System.Windows.Forms 名前空間 ) では 其の表示スタイルを 大きなアイコン にする事に依り サムネイル画像を一覧表示する事が出来る 本稿では其の方法に付いて解説し 以下の様な画面のサンプルアプリケーションを作成する事にする ListView コントロールに依りサムネイル画像を一覧表示するアプリケーションボタンがクリックされると 特定のディレクトリに格納されて居る JPEG 画像を ListView コントロールに依り一覧表示する ImageList コンポーネントと ListViewItem オブジェクト 大きなアイコン 表示の ListView コントロール (View プロパティを View.LargeIcon に設定 ) に画像を表示する為には 先ず ImageList コンポーネントと ListViewItem オブジェクトとの 2 つを準備する必要が有る ImageList コンポーネントは複数の画像を保持する事の出来るコレクションオブジェクトで有る 此等 2 つに関してポイントを纏めると 次の様に成る ImageList コンポーネントのインスタンスを ListView コントロールの LargeImageList プロパティに設定する ListView コントロールで表示される各項目は ListViewItem オブジェクトで有る 各 ListViewItem オブジェクトには 其の表示名と ImageList コンポーネント内の画像のインデックス番号を指定する 詰まり 画像を表示するには ImageList コンポーネントに画像を追加し 其の画像のインデックス番号を持つ ListViewItem オブジェクトを作成し 其れを ListView コントロール ( の Images プロパティ ) に追加すれば良い -4-

サムネイル画像を一覧表示するアプリケーション 以下に 冒頭で示したアプリケーションのコードを示す 此のコードを実行するには Visual Studio 2005 で Windows アプリケーションを新規作成し ListView コントロール Button コントロール ImageList コンポーネントの 3 つをフォームに配置して置く必要が有る 然して 配置した Button コントロールの Click イベントのハンドラを実装する ' ボタン ( 表示 ) がクリックされた時の処理 Private Sub btndisp_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btndisp.click Dim Dr As String = "c: windows" ' 画像ディレクトリ Dim Fl As String( ) = System.IO.Directory.GetFiles( Dr, "*.gif" ) Dim W As Integer = 100 Dim H As Integer = 80 imglist.imagesize = New Size( W, H ) lsvdisp.largeimagelist = imglist For I As Integer = 0 To ( Fl.Length - 1 ) Dim Org As Image = Bitmap.FromFile( Fl( I )) Dim Dst As Image = CreateThumbnail( Org, W, H ) imglist.images.add( Dst ) lsvdisp.items.add( Fl( I ), I ) Org.Dispose( ) Dst.Dispose( ) Next ' サムネイル ( 幅 W 高さ H の Image オブジェクト ) を作成するジェネラルプロシージャ Function CreateThumbnail(ByVal Img As Image, ByVal W As Integer, ByVal H As Integer) _ As Image Dim Canvas As New Bitmap( W, H ) Dim G As Graphics = Graphics.FromImage( Canvas ) G.FillRectangle(New SolidBrush( Color.White ), 0, 0, W, H ) Dim Fw As Double = CDbl( W ) / CDbl( Img.Width ) Dim Fh As Double = CDbl( H ) / CDbl( Img.Height ) Dim Sc As Double = Math.Min( Fw, Fh ) Dim W2 As Integer = CInt( Img.Width * Sc ) Dim H2 As Integer = CInt( Img.Height * Sc ) G.DrawImage( Img, ( W - W2 ) 2, ( H - H2 ) 2, W2, H2 ) G.Dispose( ) Return Canvas End Function -5-

// ボタン ( 表示 ) がクリックされた時の処理 private void btndisp_click( object sender, System.EventArgs e ) string dr = @"c: windows"; // 画像ディレクトリ string[ ] fl = System.IO.Directory.GetFiles( dr, "*.gif" ); int w = 100; int h = 80; imglist.imagesize = new Size( w, h ); lstdisp.largeimagelist = imglist; for (int i = 0; i < fl.length; i++ ) Image org = Bitmap.FromFile( fl[ i ]); Image dst = CreateThumbnail( org, w, h ); imglist.images.add( dst ); lstdisp.items.add( fl[ i ], i ); org.dispose( ); dst.dispose( ); // サムネイル ( 幅 W 高さ H の Image オブジェクト ) を作成するメソッド Image CreateThumbnail( Image image, int w, int h) Bitmap canvas = new Bitmap( w, h ); Graphics g = Graphics.FromImage( canvas ); g.fillrectangle( new SolidBrush( Color.White ), 0, 0, w, h ); float fw = ( float )w / ( float )image.width; float fh = ( float )h / ( float )image.height; float scale = Math.Min( fw, fh ); fw = image.width * scale; fh = image.height * scale; g.drawimage( image, ( w fw ) / 2, ( h fh ) / 2, fw, fh ); g.dispose( ); return canvas; ListView コントロールで表示される画像のサイズは ImageList コンポーネントの ImageSize プロパティに依り決まり 個々の画像毎に変える事が出来ない 其の為 此のコードでは 予め画像を縮小 拡大したサムネイル画像を作成して居る 此れを行って居るのが CreateThumbnail メソッドで有る 因みに ListView コントロールでは画像の表示間隔も変更出来ない 此の表示間隔は コントロールパネルの 画面 プロパティの [ デザイン ] タブに有る アイコンの表示間隔 ( 横 ) 及び アイコンの表示間隔 ( 縦 ) で設定されて居る値に依り決定される -6-

ListView コントロールで項目を選択出来ない様にする Windows フォームの ListView コントロールでは 項目 ( アイテム ) をマウスで選択する事が出来るが 一覧表示等の目的で項目を選択出来ない様に仕度い場合が有る Enabled プロパティに false を設定すれば項目は選択出来なく成るが 背景色がグレーに設定され 亦 スクロール等も出来なく成る 猶 ListView コントロールには ReadOnly と謂ったプロパティは用意されて居ない 此の様な場合には ListView コントロールで項目が選択された時に 其の選択をキャンセルする事で ListView コントロールを表示専用と仕て観せる事が出来る 具体的には ListView コントロールの ItemSelectionChanged イベントハンドラを次の様に記述すれば良い ItemSelectionChanged イベントは 其の名の通り 項目の選択状態が変化した時に発生するイベントで有る ' ItemSelectionChanged イベントハンドラ Private Sub ListView1_ItemSelectionChanged( ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.ListViewItemSelectionChangedEventArgs ) _ Handles ListView1.ItemSelectionChanged If e.isselected Then e.item.selected = False ' 項目の選択をキャンセル End If // ItemSelectionChanged イベントハンドラ private void listview1_itemselectionchanged( object sender, ListViewItemSelectionChangedEventArgs e ) if ( e.isselected ) e.item.selected = false; // 項目の選択をキャンセル 項目の選択をキャンセルする ItemSelectionChanged イベントハンドラ イベントハンドラの第 2 パラメータで有る ListViewItemSelectionChangedEventArgs クラス (System.Windows.Forms 名前空間 ) のオブジェクト ( 変数 e) では IsSelected プロパティに依り項目が選択されたか何うかが解る 上記リストでは 此れが true の場合に 選択されて居る項目の Selected プロパティに false を設定し 其の選択をキャンセルして居る -7-