SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(SPREAD)

SPREAD for .NET Windows Forms Editionを使った開発の極意

市販コンポーネントのパイオニアSPREAD for .NETの使い方を短時間で習得

  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (53.1 KB)

表示内容を修飾する

 サンプル「CZ0909FollowerType1」のように、プロパティウィンドウでの設定も含めて記述するコードは、行数は少ないですが見た目が良いとは言えません。そこで、サンプル「CZ0909FollowerType2」では、見た目を修飾すると共に、byte配列に納められた画像ファイルを表示する部分にも対応してみました。

図2 サンプルCZ0909FollowerType2の実行結果
図2 サンプルCZ0909FollowerType2の実行結果

 サンプル「CZ0909FollowerType2」では、フォームのLoadイベントと一覧取得ボタンのClickイベントの2カ所で修飾を行っています。大半の処理はLoadイベントに記載していますが、Clickイベントでは取得したデータに合わせてさらに細かな調整を行っています。

Loadイベントでの処理

 Loadイベントでは、次の処理を行っています。

  1. スキンを適用
  2. セル型の設定(テキスト型はReadOnly、Image型は縦横比を崩さずにサイズ調整)
  3. 列数設定
  4. 数式指定モードの指定
  5. シート全体の調整
  6. 列ヘッダの設定
  7. 列ヘッダの連結
  8. 高さや幅変更の抑止
  9. 各列の定義

スキンを適用

 SPREAD for .NETには、罫線や色調を組み合わせた「スキン」と呼ばれるテンプレート機能があります。独自にスキンを作成して指定する事もできますが、標準で定義されているデフォルトスキンにも使いやすいものが揃っています。

リスト2 スキンを適用
Me.FpSpread1_Sheet1.ActiveSkin = FarPoint.Win.Spread.DefaultSkins.Colorful4
  • ActiveSkinプロパティを設定してスキンを適用

セル型の設定

 SPREAD for .NETでは、セルに対してさまざまな型を指定できます。型に合わせてデータの表示方式が異なるので、データ型に合わせたセル型を選定しなければなりません。今回のサンプルでは、テキスト以外に画像データがあるので、テキスト型セルとイメージ型セルの2つのセル型用のオブジェクトを定義して、該当列に適用する準備を行います(テキスト型はReadOnly、Image型は縦横比を崩さずにサイズ調整)。

リスト3 セル型の設定
Dim textCellType As New FarPoint.Win.Spread.CellType.TextCellType
Dim imageCellType As New FarPoint.Win.Spread.CellType.ImageCellType

textCellType.ReadOnly = True
imageCellType.Style = FarPoint.Win.RenderStyle.StretchAndScale
  1. テキスト型のReadOnlyプロパティをTrueにし、読み取り専用に設定
  2. イメージ型のStyleプロパティをStreatchAndScaleにし、縦横比を変えずにセルの大きさに合わせて画像を表示するように設定

列数の設定

 シート全体の調整などを行った場合、不要な列があると処理量が多くなるため、なるべく早いタイミングで列数を設定します。

リスト4 列数の設定
Me.FpSpread1_Sheet1.Columns.Count = 9

数式指定モードを指定

 セルに数式を埋め込む場合、他のセルを指定する書式にはA1形式とR1C1形式の2つがあります。R1C1形式の方が列や行の位置を絶対位置でも相対位置でも指定しやすいので、サンプルではR1C1形式を指定しています。

リスト5 数式指定モードを指定
Me.FpSpread1_Sheet1.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1

シート全体の調整

 サンプル「CZ0909FollowerType1」では、DataSetの内容に応じてセル型や列幅が自動的に決まりましたが、明示的に修飾を行うときには、この自動機能をオフにしないと設定した内容が実行時に有効になりません。

リスト6 シート全体の調整
Me.FpSpread1_Sheet1.DataAutoSizeColumns = False
Me.FpSpread1_Sheet1.DataAutoCellTypes = False
Me.FpSpread1_Sheet1.AutoGenerateColumns = False
  1. DataAutoSizeColumnsプロパティをFalseにして、列幅自動設定を無効化
  2. DataAutoCellTypesプロパティをFalseにして、セル型自動設定を無効化
  3. AutoGenerateColumnsプロパティをFalseにして、DataSetの列から自動的に列を生成しないように設定

列ヘッダのWordWrap抑止

 列ヘッダに表示するタイトルが折り返され、読めなくならないように、WordWrapを無効にします。

リスト7 列ヘッダのWordWrap抑止
Dim colHeader As New CellType.ColumnHeaderRenderer
colHeader.WordWrap = False
Me.FpSpread1_Sheet1.ColumnHeader.DefaultStyle.Renderer = colHeader

列ヘッダの連結

 サンプル「CZ0909FollowerType2」では、左から2つ目の列ヘッダ(列指定は「0」から始まるので、ここでの指定値は「1」)から3列を、1つのヘッダに連結するデザインになっています。

 列ヘッダの連結にはAddColumnHeaderSpanCellメソッドを使用します。

リスト8 列ヘッダの連結
Me.FpSpread1_Sheet1.AddColumnHeaderSpanCell(0, 1, 1, 3)

高さや幅変更の抑止

 行の高さや列の幅を利用者の好みに応じて変更できるアプリも多いですが、業務アプリでは固定化して設計時の状態から変更しないことで、使い勝手の相違が生じないようにする場合があります。そのような場合には、ResizableプロパティをFalseにすると良いでしょう。

リスト9 高さや幅変更の抑止
Me.FpSpread1_Sheet1.RowHeader.Rows.Default.Resizable = False
Me.FpSpread1_Sheet1.ColumnHeader.Columns.Default.Resizable = False

各列の定義

 ここまで設定できたら、後は各列を順次定義していくだけになります。

リスト10 各列の定義
'ID列は非表示にする
Me.FpSpread1_Sheet1.Columns.Get(0).DataField = "ID"
Me.FpSpread1_Sheet1.Columns.Get(0).Visible = False
'アイコン列の設定を行う
Me.FpSpread1_Sheet1.Columns.Get(1).DataField = "ProfileImage"
Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 1).Text = "ユーザ名"
Me.FpSpread1_Sheet1.Columns.Get(1).CellType = imageCellType
Me.FpSpread1_Sheet1.Columns.Get(1).Width = Me.FpSpread1_Sheet1.Rows.Get(1).Height
'名前列の設定を行う
Me.FpSpread1_Sheet1.Columns.Get(2).DataField = "Name"
Me.FpSpread1_Sheet1.Columns.Get(2).CellType = textCellType
'ID名列の設定を行う
Me.FpSpread1_Sheet1.Columns.Get(3).DataField = "ScreenName"
Me.FpSpread1_Sheet1.Columns.Get(3).CellType = textCellType
'プロテクション列は非表示にする
Me.FpSpread1_Sheet1.Columns.Get(4).DataField = "IsProtected"
Me.FpSpread1_Sheet1.Columns.Get(4).Visible = False
'プロテクションだったら○表示する列に計算式を設定する
Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 5).Text = "プロテクト"
Me.FpSpread1_Sheet1.Columns.Get(5).CellType = textCellType
Me.FpSpread1_Sheet1.Columns.Get(5).Formula = "IF(RC5=""True"",""○"","""")"
Me.FpSpread1_Sheet1.Columns.Get(5).HorizontalAlignment = CellHorizontalAlignment.Center
'フォロー列は非表示にする
Me.FpSpread1_Sheet1.Columns.Get(6).DataField = "IsFollowing"
Me.FpSpread1_Sheet1.Columns.Get(6).Visible = False
'フォローしてたら○表示する列に計算式を設定する
Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 7).Text = "フォロー済"
Me.FpSpread1_Sheet1.Columns.Get(7).CellType = textCellType
Me.FpSpread1_Sheet1.Columns.Get(7).Formula = "IF(RC[-1]=""True"",""○"","""")"
Me.FpSpread1_Sheet1.Columns.Get(7).HorizontalAlignment = CellHorizontalAlignment.Center
'最新の発言列の設定を行う
Me.FpSpread1_Sheet1.Columns.Get(8).DataField = "StatusText"
Me.FpSpread1_Sheet1.ColumnHeader.Cells(0, 8).Text = "最新の発言"
Me.FpSpread1_Sheet1.Columns.Get(8).CellType = textCellType
  1. データを特定するためのID列は、UI的に不要なのでVisibleプロパティをFalseに設定
  2. アイコン列は縦横を同じにして正方形領域にするため、Columns.Get(1).WIdthプロパティにRows.Get(1).Heightプロパティを設定
  3. DataSetのIsProtected項目はそのまま表示しないので、VisibleプロパティをFalseに設定
  4. (3)の列を参照して内容がTrueの時には「○」を表示するように、Fomulaプロパティに指定。Fomulaプロパティに記述されている「RC5」指定は、同一行の5カラム目(指定値は「0」から始まるのでColumns.Get(4)列のこと)を表しています
  5. IsFollowing項目の内容がTrueの時には「○」を表示するようにFomulaプロパティを設定する箇所では、別の指定方法である「RC[-1]」指定。これは該当列の1つ前の列を表しています

次のページ
デザイナを使ってインターフェースのデザインを決める

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(SPREAD)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4436 2009/09/30 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング