InputManとPlusPakの旧バージョン(5.0J/6.0J/7.0J/8.0J)と同一プロジェクト内で共存させる方法

文書番号 : 40442     文書種別 : 技術情報     登録日 : 2017/07/26     最終更新日 : 2017/07/26
文書を印刷する
対象製品
MultiRow for Windows Forms 10.0J
詳細
MultiRow for Windows Forms 10.0J(以下、MultiRow10)では、InputManCellを使用するために、InputMan for Windows Forms 10.0J(以下、InputMan10)のアセンブリを参照する必要があります。同じように、MultiRow10でPlusPakCellを使用するには、PlusPak for Windows Forms 10.0J(以下、PlusPak10)のアセンブリを参照する必要があります。

MultiRow10では、InputManCellとPlusPakCellを標準機能として提供しているため、MultiRow10のGcMultiRowコントロールをフォームに追加した場合や、MultiRowテンプレートにInputManCellやPlusPakCellを追加した場合には、プロジェクトの参照設定にInputMan10とPlusPak10のアセンブリが自動で追加されます。

そのため、同一プロジェクト内でInputMan for Windows Forms 5.0J/6.0J/7.0J/8.0JやPlusPak for Windows Forms 5.0J/6.0J/7.0J/8.0Jのコントロールを使用している場合には、名前空間が同じ複数のバージョンのアセンブリを参照することになり、プロジェクトのビルド時にアセンブリ参照で名前空間の競合エラーが発生します。

この問題を回避する方法は、C#とVisual Basicでそれぞれ異なります。
詳細については、以下の項目をご確認ください。

C#の場合
エイリアスを定義する方法で回避することができます。

【競合を回避する方法】
プロジェクトの参照設定で下記の参照に対して、プロパティウィンドウから「エイリアス」に任意の修飾子(例えば、"InputMan10")を定義します。
  • GrapeCity.Framework.InputMan.v24
  • GrapeCity.Framework.PlusPak.v24
  • GrapeCity.Win.Editors.v100
  • GrapeCity.Win.PlusPak.Calendar.v100
  • GrapeCity.Win.PlusPak.v100
これらは、MultiRow10を追加する際に自動的に生成されるInputMan10およびPlusPak10の参照です。InputMan10/PlusPak10を使用しない場合は、上記の設定によって名前空間の競合を回避し、正常にビルドできるようになります。

以下では、同じプロジェクトでMultiRow10とInputMan8のコントロールを併用する場合の設定方法の例を説明します。

1. プロジェクトを新規作成します。
2. フォームにInputMan8のGcTextBoxを追加します。(例:gcTextBox1)
3. フォームにMultiRow10のGcMultiRowを追加します。(例:cMultiRow1)
4. プロジェクトをビルドすると、InputManのアセンブリ参照で競合エラーが発生します。
5. ソリューションエクスプローラの「参照設定」から、GrapeCity.Framework.InputMan.v24を選択します。
6. プロパティウィンドウの「エイリアス」にInputMan10を設定します。
7. 同じように、GrapeCity.Win.Editors.v100を選択して、「エイリアス」にInputMan10を設定します。
8. プロジェクトをビルドすると、正常にビルドが行われます。

プロジェクトでPlusPak8を使用している場合は、以下の参照に対してエイリアスの設定が必要になります。
  • GrapeCity.Framework.PlusPak.v24
  • GrapeCity.Win.PlusPak.Calendar.v100
  • GrapeCity.Win.PlusPak.v100
<注意>
上記の設定は、MultiRow10でInputManCell、PlusPakCellを使用していない場合に有効です。InputManCell、PlusPakCellを使用している場合は以下の設定も必要になります。

【InputMan10/PlusPak10を参照したい場合】
上記の回避方法を実施したプロジェクトで、MultiRow10のInputManCellとPlusPakCellを使用する場合は、エイリアスを使用して、InputManCellとPlusPakCellが明示的にInputMan10とPlusPak10のアセンブリを参照するように設定する必要があります。

この際は、下記の点にご注意ください。
  • プログラムの最初にexternキーワードを使用してエイリアスを宣言します。
    例:extern alias InputMan10;
  • コードでInputMan10やPlusPak10の型を参照する際に名前空間の先頭にエイリアスを付けます。
    例:gcTextBoxCell1.DropDown.OpeningAnimation = InputMan10.GrapeCity.Win.Editors.DropDownAnimation.Slide;
また、以下のサンプルコードをご参考にしてください。

[C#]
extern alias InputMan10;

using System;
using System.Drawing;
using System.Windows.Forms;

using GrapeCity.Win.MultiRow;
using InputManCell = GrapeCity.Win.MultiRow.InputMan;


namespace WindowsFormsApplication2
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      // InputManCellの設定(InputMan10のアセンブリを参照)

      InputManCell.GcTextBoxCell gcTextBoxCell1 = new InputManCell.GcTextBoxCell();
      gcTextBoxCell1.Style.Multiline = MultiRowTriState.True;

      // 文字単位で改行するよう設定します。
      gcTextBoxCell1.WrapMode = InputMan10.GrapeCity.Win.Editors.WrapMode.CharWrap;

      // 点線で赤の罫線を表示するよう設定します。 
      gcTextBoxCell1.GridLine.Style = InputMan10.GrapeCity.Win.Editors.LineStyle.Dashed;
      gcTextBoxCell1.GridLine.Color = Color.Red;

      gcMultiRow1.Template = Template.CreateGridTemplate(new Cell[] { gcTextBoxCell1 });

      // InputManの設定(InputMan8のアセンブリを参照)
      gcTextBox1.Multiline = true;

      // 文字単位で改行するよう設定します。
      gcTextBox1.WrapMode = GrapeCity.Win.Editors.WrapMode.CharWrap;

      // 点線で赤の罫線を表示するよう設定します。
      gcTextBox1.GridLine.Style = GrapeCity.Win.Editors.LineStyle.Dashed;
      gcTextBox1.GridLine.Color = Color.Red;
    }
  }
}


エイリアスの詳細につきましては、MSDNにある次の資料もご参考ください。

方法: グローバル名前空間エイリアスを使用する (C# プログラミング ガイド)

http://msdn.microsoft.com/ja-jp/library/vstudio/c3ay4x3d.aspx


extern エイリアス (C# リファレンス)

http://msdn.microsoft.com/ja-jp/library/vstudio/ms173212.aspx


【InputMan10/PlusPak10にアップグレードした場合】
プロジェクト内のInputManとPlusPakを既存の旧バージョンから10.0Jに移行する場合は、製品ヘルプにある「移行について」を参考に製品の移行を行なってから、以下の変更を行う必要があります。

1. コード内のエイリアス修飾子を手動で削除する。
2. 参照設定のプロパティの「エイリアス」をglobalに設定する。


Visual Basicの場合
Visual Basicをご使用の場合は、エイリアスを定義する方法が使用できませんが、参照設定に追加されたInputMan10、PlusPak10の参照を手動で削除することで、この問題を回避することができます。

以下では、同じプロジェクトでMultiRow10とInputMan8のコントロールを併用するための手順例を説明します。

1. プロジェクトを新規作成します。
2. フォームにInputMan8のGcTextBoxを追加します。(例:gcTextBox1)
3. フォームにMultiRow10のGcMultiRowを追加します。(例:gcMultiRow1)
4. プロジェクトをビルドすると、InputManのアセンブリ参照で競合エラーが発生します。
5. ソリューションエクスプローラの「参照設定」から、以下の参照を削除します。
 ・GrapeCity.Framework.InputMan.v24
 ・GrapeCity.Win.Editors.v100 
6. プロジェクトをビルドすると、正常にビルドが行われます。

プロジェクトでPlusPak8を使用している場合は、以下の参照を削除する必要があります。
  • GrapeCity.Framework.PlusPak.v24
  • GrapeCity.Win.PlusPak.Calendar.v100
  • GrapeCity.Win.PlusPak.v100
<注意>
この回避方法を使用する場合には、MultiRow10でInputManCellを使用することはできません。これは、MultiRow10のInputManCellがInputMan10のアセンブリを参照する必要があるためです。また、PlusPakCellについても同様です。