ActiveX製品からの移行
- Windows Forms -
「ActiveX」と「.NET Framework」は異なる技術基盤でアプリケーションを実行しています。そのため、ActiveX用SPREADと.NET用SPREADには互換性がありません。ここでは両製品の違いについて、いくつかのポイントを紹介します。
アーキテクチャ
の違い移行の注意点
主な相違点
デモ&
トライアル
ActiveXと.NET Frameworkは異なるアーキテクチャ
.NET製品のSPREADは.NET Frameworkの共通言語ランタイム(CLR)と基本クラスライブラリ(BCL)をベースとして開発されています。ActiveX製品の機能を最大限に継承していますが、異なるフレームワークのため、ActiveX製品(SPREAD 2.5J~7.0J)との間に互換性はなく、移行ツールも提供しておりません。ActiveX製品で開発されたソフトウェアを.NETテクノロジーに移行するためには、.NETアプリケーションの開発手順に従い新規アプリケーションとして開発し直す必要があります。
[Visual Basic 6コードのアップグレード] ダイアログボックス等による移行はサポートされません
ActiveX製品からの移行の注意点
1. ActiveX2.5J/3.0JのActionプロパティは6.0J以降ではメソッドに
.NET製品を用いてアプリケーションを作成する場合は注意が必要です。技術的な相違点は後述しますが、代表的なものとしてはActionプロパティがあげられます。ActiveX製品であるSPREAD 2.5J/3.0Jにて提供されていたActionプロパティ機能は、SPREAD 6.0J以降すべて「メソッド」に変更されています。 .NET製品では基本的にSPREAD 7.0Jの機能を最大限継承していますので、当プロパティを使った処理は全て変更する必要があります。また、開発環境も .NET Framework となるため一部機能に相違があります。たとえば、アクティブセルを設定するアクション「SS_ACTION_ACTIVE_CELL」は「SetActiveCell」という「メソッド」で記述します。

2. デザイン情報はそのまま移行
ソースコードについては.NET Frameworkの仕様やコーディング規約、および.NET製品の仕様に基づいた書き直しが不可欠ですが、ActiveX製品で作成されたデザイン定義ファイル(SPREAD7.0Jの場合は*.SS7ファイル)は.NET製品で読み込むことができます。このため旧プロジェクトから.NETへの移行の際には本定義ファイルをデザイナで読み込むことで、SPREADの設計作業を大幅に簡略化することができます。※ 微調整が必要となる場合もあります

3. プロパティやメソッドの名前は継承しています
ActiveX製品で使われていたプロパティやメソッド名のほとんどは.NET製品でも同名または類似した機能名で提供しています。そのため、同一の機能は簡単に見つけることができます。たとえば、セルの背景色を設定するプロパティ名は両製品ともに「BackColor」です。なお、両製品のプロパティ・メソッド・イベント対応表が製品ヘルプで提供していますので併せてご覧ください。(トライアル版でもご覧いただけます)
ActiveX製品との主な相違点
ここではActiveX製品と.NET製品における主な相違点について具体的に説明します。機能の比較表などくわしい情報は製品ヘルプをご覧ください。(トライアル版でもご覧いただけます)1. コレクションインデックスの0(ゼロ)オリジン
Visual Basic 6.0では、任意の上限/下限を持つ配列を宣言することが可能だったため、ActiveX製品での各コレクションインデックスは1から開始されていました。ActiveX製品
'最左上セルのTextプロパティを参照します ※インデックスは1から開始
With fpSpread1
.Row = 1
.Col = 1
Debug.Print .Text
End With一方、Visual Basic .NETではインデックスの下限は必ず「0」(ゼロオリジン)となります。.NET製品ではこの仕様に基づき、すべてのコレクションのインデックスはゼロオリジンに変更されています。
.NET製品
'最左上セルのTextプロパティを参照します ※インデックスは0から開始
Console.WriteLine(FpSpread1.ActiveSheet.Cells(0, 0).Text)
ゼロオリジンではないプロジェクトを移行する際には各コレクションのインデックス情報も同時に変更することをお勧めします。
2. セルインデックスの指定方法
セルの背景色を変更するような場合、ActiveX製品では対象となるセルをRowプロパティとColプロパティによりあらかじめ指定する必要がありました。ActiveX製品
'セル(2,2)の背景色を赤にします
With fpSpread1
.Row = 2
.Col = 2
.BackColor = RGB(255, 0, 0)
End With
.NET製品ではオブジェクト指向を前提としており、基本的にシート・列・行・セルなどはすべて独立したクラス構造です。たとえば同様にセルの背景色を設定したい場合には、対象となる「セル」クラスに行列インデックスを指定し、クラスメンバであるBackColorプロパティに対して色を設定します。
.NET製品
'セル(2,2)の背景色を赤にします ※インデックスはゼロオリジン
FpSpread1.ActiveSheet.Cells(1, 1).BackColor = Color.Red
クラス構造
FpSpread1 (FpSpreadクラス:SPREADシートコントロール本体)
+ ActiveSheet (SheetViewクラス:アクティブシート)
+ Cells(1, 1) (Cellクラス:対象セル)
+ BackColor (BackColorプロパティ:背景色を制御するCellクラスメンバ)
3. イベント引数
ActiveX製品でイベントを実装した場合、必要な情報はすべて異なる引数から取得できました。たとえば、アクティブセルの移動時に発生するLeaveCellイベントでは次の情報を取得できます。ActiveX製品
Private Sub fpSpread1_LeaveCell(ByVal Col As Long, ByVal Row As Long, _
ByVal NewCol As Long, ByVal NewRow As Long, Cancel As Boolean)
'<各引数より情報を取得します>
'--------------------------------------------------------------------
'Col :アクティブセルの列番号
'Row :アクティブセルの行番号
'NewCol :新しいアクティブセルの列番号
'NewRow :新しいアクティブセルの行番号
'Cancel :アクティブセルの移動を無効にするかどうかの指定
End Sub
.NET製品でもイベント引数より情報を取得することは可能ですが、受け取り方が多少異なります。.NET製品では System.EventArgs クラスを継承したイベント専用の e というクラスから情報を取得します。
.NET製品
Private Sub FpSpread1_LeaveCell(ByVal sender As Object, _
ByVal e As FarPoint.Win.Spread.LeaveCellEventArgs) Handles FpSpread1.LeaveCell
'<LeaveCellEventArgsクラスである引数eより情報を取得します>
'--------------------------------------------------------------------
'e.Cancel :セル間の移動をキャンセルするかどうかを表す値を取得または設定します
'e.Column :フォーカスが離れたセルの列インデックス
'e.NewColumn :フォーカスの移動先のセルの列インデックス
'e.NewRow :フォーカスの移動先のセルの行インデックス
'e.Row :フォーカスが離れたセルの行インデックス
End Sub
4. Actionプロパティ
.NET製品では、ActiveX製品にて提供されていたActionプロパティに該当する機能は提供していません。先述のとおり、初期ActiveX製品であるSPREAD 2.5J/3.0JのActionプロパティ機能は SPREAD 6.0J以降すべて「メソッド」に変更されています。(SPREAD 6.0J/7.0Jでは旧バージョンとの互換性を保つため、例外的にサポートしています)
ActiveX製品
'セル(3,3)をアクティブにします
With fpSpread1
.Sheet = 1
.Row = 3
.Col = 3
.Action = SS_ACTION_ACTIVE_CELL
End With
.NET製品では基本的にSPREAD 7.0Jの機能を継承していますが、Actionプロパティに該当する機能は同等機能である「メソッド」として記述します。Actionプロパティとの比較表ついてはこちらをご覧ください。
.NET製品
※ インデックスはゼロオリジン
'SetActiveCellメソッド呼び出しによってセル(2,2)をアクティブにします
FpSpread1.ActiveSheet.SetActiveCell(2, 2)
5. オーナー描画型セル
ActiveX製品ではセルを描画する必要があるときに発生するDrawItemイベントを併用することで、独自のオーナー描画型セルを実現できました。.NET製品では同等のセル型は提供されていません。このような場合は、既存のセル型クラスを継承したサブクラスを作成したうえ、独自の描画処理を実装する必要があります。サブクラスの作成方法については製品ヘルプ「サンプルコード集」も併せてご参照ください。(DrawItemイベントは.NET製品で提供していません)
