はじめに
このドキュメントは、WinFormsプラットフォーム向けに作成されたアプリケーションをWPFプラットフォームアプリケーションへと移行する案件において、FlexGrid for WinFormsを使用して設定された機能をFlexGrid for WPFに置き換える際に問題となる、動作の違いやその解決方法について紹介します。
また、Windows Forms開発者がWPFの開発を始める際に参考となる情報も掲載していますので、移行の際のご参考情報としてご利用ください。
移行の概要
移行について
WinForms版およびWPF版のFlexGridは、多彩な表現力と柔軟性を兼ね備えるグリッドコンポーネントという同一コンセプトの下で開発されており、WPF版はWinForms版の主要な概念や機能を相互に継承しています。異なるプラットフォーム間での移行において、FlexGridが提供する機能の多くは、移行先においても引き続き利用することができます。
一方で、WinForms版とWPF版は対象プラットフォーム上で最大のパフォーマンスを発揮するようチューニングされており、同一機能であってもプラットフォームに依存した実装が行われているため、メンバーレベルでの100%互換が保たれているわけではありません。特定の機能を使用した一部処理においては、その違いを考慮し適切な実装方法に置き換える必要があります。
両製品の共通点と相違点
ターゲットプラットフォーム
WinForms版とWPF版には、機能名レベルで同じものが数多く存在します。しかし、それぞれターゲットとなるプラットフォームの特性に合わせ、すべてのメンバーの型や動作が調整されています。例えばキーボードおよびマウス関連イベントはプラットフォームの標準仕様に準拠しており、WinForms版とWPF版では、その発生タイミングやイベント引数のオブジェクト構造などは異なっています。
データ接続
それぞれ、対応するプラットフォームにおける標準的なデータ接続メカニズムに準拠しており、接続方法が異なります。WinForms版では、ADO.NETデータソースオブジェクト(DataTable、DataView、DataSet、DataViewManagerなど)をサポートしており、C1FlexGrid.DataSourceプロパティにデータソースオブジェクトを設定します。WPF版では、IEnumerableインタフェースもしくはICollectionViewインタフェースを実装するオブジェクトをデータソースとして利用でき、C1FlexGrid.ItemsSourceプロパティやColumn.Bindingプロパティを使用してバインディングに関する設定を行って接続します。
グループ化とフィルタリング
グループ化とフィルタリング操作は、両方の製品で行うことが可能です。ただし、WinForms版ではそのための組み込みUIが用意されていますが、WPF版ではこれらの機能がそれぞれ拡張クラスとして提供されます。これらを使用する場合は、それぞれ対応するアセンブリへの参照設定を追加し、拡張クラスとC1FlexGridを連動させる必要があります。
カスタムセルの実装
それぞれ、セルの外観や編集時エディタをカスタマイズした独自のカスタムセルを実装する方法が用意されています。WinForms版ではOwnerDrawCellイベントによるオーナー描画と、IC1EmbeddedEditインタフェースを実装することによるカスタムエディターが利用できます。一方、WPF版ではテンプレートを使用したXAMLでのカスタムセルのほか、CellFactoryクラスを使用したコードでのカスタムセルが利用可能です。
移行方法
WinForms版とWPF版のFlexGridには、互換性がありません。WinForms版FlexGridを用いて作成したWinFormsプロジェクトをWPFプロジェクトに移行するには、以下で紹介する資料などをご参考いただき、それぞれ対応するメンバーや代替手段に置き換える必要があります。
技術資料とサンプル
協力: エスビーエス株式会社
メンバー比較表
WinForms版とWPF版の主な機能に対するメンバー比較表を別資料にまとめております。それぞれ対応するメンバー、および代替機能の詳細についてはこちらをご参考ください。
サンプルプロジェクト
両製品の各機能について、実装方法の違いをコードでご確認いただくためのサンプルを用意しています。違いを把握しやすいように1画面にWinForms版とWPF版のC1FlexGridコントロールを配置し、同じ機能を実装しています。またVisual Studioを起動しなくてもサンプル実行時にソースコードを確認することもできます。
※ このサンプルはWPFの開発経験が豊富なエスビーエス株式会社が作成しています。
[システム要件]
- ComponentOne for WinForms
- ComponentOne for WPF
- Visual Studio 2013以上
Windows Forms 開発経験者のためのWPF開発技術資料
この資料はWindows Formsの開発経験はあるものの、WPF開発経験の浅い開発者に対して、開発を進める際に気を付けるべきポイントをまとめた資料になります。
Windows Forms 開発経験者のためのWPF開発のポイント集
※ この資料は、WPFの開発経験が豊富なエスビーエス株式会社が社内で活用している資料を特別に公開したものです。開発現場の生の声としてお役立てください。
よくある質問
弊社テクニカルサポートに寄せられたお問い合わせのうち、移行に関して多く寄せられるご質問について紹介いたします。
技術的な質問
Q1. WinForms版FlexGrid用に作成した初期化処理や実装コードなどは、WPF版FlexGridでそのまま利用できますか?
A1. FlexGridのWinForms版とWPF版では、対象プラットフォームの違いなどもあり、メンバー構成が一部異なります。そのため、WinForms版のFlexGridを対象としたコードは、そのままではWPF版FlexGridではご利用いただけません。本資料末尾にあるメンバー比較表やサンプルプロジェクトをご参考いただき、適切な形式でコードを修正いただく必要がございます。
Q2. WinForms版FlexGridにて保存したグリッドデータを、WPF版FlexGridで利用することはできますか?
A2. WinForms版とWPF版のFlexGrid間で、グリッドデータの互換はございません。
Q3. WinForms版FlexGridを用いて作成したWinFormsプロジェクトを、WPFプロジェクトに変換するツールはありますか?
A3. WinFormsプロジェクトをWPFプロジェクトへ変換するためのツール類は用意されておりません。本製品に付属のプロジェクト移行ツールは、同一プラットフォーム間でのプロジェクトの移行(アップグレード)を目的としており、異なるプラットフォームへのプロジェクトの変換を行うことはできません。
運用およびライセンスに関する質問
Q1. WinFormsからWPFへ移行する際、手持ちのWinFormsの開発ライセンスでWPF版アセンブリを使用した開発を行うことはできますか?
A1. ComponentOne for WPFの各アセンブリをご利用いただくには、WPF版あるいはEnterprise版の開発ライセンスが必要となります。WinForms版の開発ライセンスにてWPF版アセンブリを使用した開発を行うことはできません。
Q2. WinForms版とWPF版で、それぞれ異なるリリースバージョンを同一環境に共存できますか?
A2. WinForms版とWPF版のアセンブリ間においてはお互いに干渉しないものの、プロジェクト移行ツールやレポートデザイナなどの各種ツール類は各プラットフォーム間で共通で利用されており、製品アセンブリの特定バージョンに依存している場合がございます。バージョンの異なる複数のエディションを一つの環境にインストールすると、共通のツールが上書きされたり、適切なバージョンのツールを使用できないなどの問題が発生するため、同一環境への共存はお勧めできません。
なお、リリースバージョンが同じWinForms版とWPF版のアセンブリについては、同一環境にインストールしてご利用いただくことが可能です。
お問い合わせ
ご購入に関するお問い合わせ
各コントロールに関する詳細は以下のWeb サイトをご覧ください
FlexGrid for WinForms
FlexGrid for WPF