ライセンスされたコンポーネントから継承する |
ライセンスされた ComponentOne コンポーネント(C1FlexGrid コンポーネントなど)を継承したコンポーネントを作成する場合、継承元のコンポーネントに対するライセンス情報は引き続きプロジェクトに組み込む必要があります。これは以下のいずれかの方法で行います。
これは、「実行時にコンポーネントを組み込む」トピックの解決策1と同様の方法となります。継承元コンポーネントを一時的にウィンドウ上に配置することで、Licenses.licx に継承元コンポーネントのライセンス情報が追加されます。ライセンス情報が追加されたら、この余分なインスタンスは削除しても構いません。継承先コンポーネントは、この継承元コンポーネントのライセンス情報を見つけて使用することになります。
継承先のコンポーネントのクラス宣言の前に LicenseProvider 属性(System.ComponentModelLicenseProvider クラス)を設定することで、継承元コンポーネントのライセンス情報が正しく継承されるようになります。
以下は、C1FlexGrid コンポーネントを継承したコンポーネントに対して LicenseProvider 属性を設定した例です:
using C1.WPF.FlexGrid; using System.ComponentModel; [LicenseProvider(typeof(LicenseProvider))] class MyGrid: C1FlexGrid { // ... }
プロジェクトをリビルドすると、ツールボックス内に継承先コンポーネントが追加されます。ダブルクリックするかドラッグ&ドロップによりフォーム上に配置されると、Lienses.licx ファイルが作成され(存在しない場合)、継承先コンポーネントのライセンス情報が作成されます。
ただし、このケースにおいては、継承先コンポーネントではなく継承元コンポーネントのライセンス情報が必要である点に注意してください。継承元コンポーネントのライセンス情報が適切に Licenses.licx ファイル内に記載されていない場合、ビルド時にライセンスエラー("lc.exe" はコード -1 を伴って終了しました)が発生します。
上記コード例の場合、継承先コンポーネントをフォームに配置すると、そのライセンス情報として以下の記述が Licenses.licx に追加されます。
WpfApp1.MyGrid, WpfApp1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
この行を削除し、代わりに継承元コンポーネントである C1FlexGrid コンポーネントのライセンス情報を Licenses.licx に追加します。
C1.WPF.FlexGrid.C1FlexGrid, C1.WPF.FlexGrid.<ターゲット FW バージョン>
これにより、プロジェクトのリビルド時にライセンスエラーが発生しなくなり、適切なライセンスにてアプリケーションが実行されるようになります。
ライセンス情報が継承先コンポーネントのクラスと同じアセンブリに埋め込まれ、かつそのアセンブリがDLLである場合、本製品のライセンスメカニズムは継承先コンポーネントのライセンス情報を受け入れないことに注意してください。
この制限は、継承元コンポーネントの開発ライセンスがない環境で、継承先コンポーネントのクラスおよびそのアセンブリが他のアプリケーションで使用されないようにするために必要です。これは、利用先アプリケーションを開発・ビルドする環境に対しても、本製品の開発ライセンスが必要であることを意味します。
このようにほかのアプリケーションで使用することを目的としたコンポーネントを作成する場合は、その利用先アプリケーションにおいて「実行時にコンポーネントを組み込む」トピックで説明した解決策のいずれかを実行する必要があります。