現在地: Visual LANSA 開発者ガイド > 2. グラフィカル・ユーザーインターフェース・アプリケーションの作成 > 2.28 リポジトリのリソース > 2 28 2 5 NETコンポーネントの使い方
2.28.2.5 .NETコンポーネントの使い方

.NETコンポーネントの機能

.NETコレクション

.NETコンポーネントのサンプル・コード

 

.NETコンポーネントを一度作成すると、他のVisual LANSAコンポーネントと同じように使用できます。コンポーネントのインスタンスを作成でき、そのプロパティ、メソッド、およびイベントを使用できます。コンポーネントの中には、非常に簡単で、それらの使用にプログラミングをほとんど必要としないものもあれば、複雑な機能を提供するため、標準のVisual LANSAのコントロールを使用する場合よりもはるかに多くのコーディングを必要とするものもあります。

コンポーネントのインスタンスの定義

DEFINE_COMコマンドを使用します。クラスにコンストラクタがないか、コンストラクタがあってもパラメータがない場合、インスタンスを動的または静的のいずれかとして定義できます。そうでない場合、インスタンスは動的として設定しなければなりません。

Define_Com Class(#DOTNET1.TestClasses.MyClass) Name(#MyClass) Reference(*DYNAMIC)

クラスがコントロールの場合、コントロールをフォームにペアレント化し、フォームに表示されるようにします。その後、[デザイン] ビューでコントロールのサイズを変更して移動できます。

Define_Com Class(#DOTNET1.DotNetControls.WebBrowserX) Name(#Browser) Displayposition(4) Parent(#COM_OWNER) Tabposition(4)

動的インスタンスのインスタンス化

コンポーネントのインスタンスを動的として定義した場合、*NewまたはSET_REFコマンドを使用して、インスタンスをインスタンス化する必要があります。いずれのコマンドでも、開発者がコンストラクタを指定できます。

静的メソッドを持つクラスを定義する方法

クラスで静的メソッドを使用するには、コンポーネント・インスタンスを定義する必要があります。インスタンスは静的または動的として定義できます。一度定義すると、クラスの静的メソッドはいつでも呼び出せます。動的コンポーネント・インスタンスが定義されている場合、静的メソッドは、インスタンスをインスタンス化せずに呼び出すことができます。これにより、静的クラスを使用できるだけではなく、privateまたはprotectedコンストラクタを使用してクラスをインスタンス化できるようにします(クラスに、自分自身をインスタンス化する静的メソッドがあることが前提です)。

*NEW

クラスにコンストラクタがないか、コンストラクタがあってもパラメータがない場合、コンストラクタを指定しないか、パラメータのないコンストラクタを指定できます。それ以外の場合、パラメータはメソッド呼び出しと同じように渡す必要があります。

Variable <= *New --- Fully qualified class name ------------------ >

>----------------------------------------------------------------- >

  |                                                             |

  -- .Constructor Name ------------------------------------------

                        |                                      |

                        -- ( ----------------------------- ) -–

                              |                         |

                               ------- Parameter -------

                                 |                   |

                                  ---------<---------

 

SET_REF

詳細については、『LANSAテクニカル リファレンスガイド』の「SET_REF」を参照してください。

C#

   public ConstructorTests() {…}

   public ConstructorTests( int aNumber ) {…}

   public ConstructorTests( int aNumber, ref DateTime aDateTime, String aString ) {…}

 

RDML

   Define_Com Class(#DOTNET1.TestClasses.ConstructorTests) Name(#LCom01) Reference(*DYNAMIC)

 

   Define Field(#LNum01) Type(*INT) Length(4)

   Define Field(#LStr01) Type(*CHAR) Length(50)

   Define Field(#LDTime01) Type(*DATETIME) Length(26)

 

   #LCom01 <= *New #DOTNET1.TestClasses.ConstructorTests

   Set_Ref Com(#LCom01) To(*CREATE_AS #DOTNET1.TestClasses.ConstructorTests)

 

   #LCom01 <= *New #DOTNET1.TestClasses.ConstructorTests.ConstructorTests()

   Set_Ref Com(#LCom01) To(*CREATE_AS #DOTNET1.TestClasses.ConstructorTests.ConstructorTests)

 

   #LCom01 <= *New #DOTNET1.TestClasses.ConstructorTests.ConstructorTests#2( #LNum01 #LDTime01 #LStr01 )

   Set_Ref Com(#LCom01) To(*CREATE_AS #DOTNET1. TestClasses.ConstructorTests.ConstructorTests#2) Anumber(#LNum0501) Adatetime(#LDTi0501) Astring(#LStr0501)

 

プロパティと変数の使い方

構文

RDML Variable ..NET Property Name ----------------------------------------------- >

                                    |                                           |

                                     -- [ --------------------------------- ] -–

                                           |                             |

                                            ----------- Index -----------

                                              |                       |

                                               -----------<-----------

 

RDML Variable ..NET Variable Name

 

C#

   public int Counter

   {

      get { return mCount; }

      set { mCount = value; }

   }

 

RDML

   Define_Com Class(#DOTNET1.TestClasses.MyClass) Name(#NumericClass)

 

   #NumericClass.Counter := 120

 

   #STD_INT := #NumericClass.Counter

 

   Begin_Loop Using(#STD_INT) To(#NumericClass.Counter) Step(2)

   …

   End_Loop

 

メソッドの呼び出し

構文

RDML Variable .Method Name ----------------------------------------------- >

                             |                                           |

                              -- ( --------------------------------- ) -–

                                    |                             |

                                     -------- Parameter ----------

                                       |                       |

                                        -----------<-----------

C#

   public void

      IncrementDateByDays(

         ref DateTime                           dateTime,

         int                                    dayAdjustment )

   {

      dateTime = dateTime.AddDays( dayAdjustment );

   }

 

RDML

   Define_Com Class(#DOTNET1.TestClasses.MyClass) Name(#LClass01)

   Define Field(#LDat01) Type(*DATETIME)

   Define Field(#LDat02) Type(*DATETIME)

 

   #LDat01 := '1954-04-25 10:04:00.000000'

   #LDat02 := '1954-05-05 10:04:00.000000'

 

   #LClass01.IncrementDateByDays( #LDat01 10 )

 

   If ((#LDat01 = #LDat02))

   Endif

 

 

C#

   public String 

      DoubleIntegerReturnString(

         int                                    number,

         out int                                result )

   {

      result = number * 2;

      return String.Format( "Double {0} is {1}", number, result );

   }

 

RDML

   Define_Com Class(#DOTNET1.TestClasses.MyClass) Name(#LClass01)

   Define Field(#LNum01) Type(*INT) Length(4)

   Define Field(#LNum02) Type(*INT) Length(4)

   Define Field(#LStr01) Type(*CHAR) Length(80)

 

   #LNum01 := 411

   #LStr01 := #LClass4101.DoubleIntegerReturnString( #LNum01 #LNum02 )

   If (#LNum02 = (#LNum01 * 2))

   …

   Endif

 

 

イベント処理

イベント処理関数は、EVTROUTINEコマンドを使用して定義します。このコマンドの詳細については、『LANSA テクニカル リファレンスガイド』の「EVTROUTINE」を参照してください。コマンドの基本的な構文は以下のようになります。

EVTROUTINE --- HANDLING ( Variable Name .Event Name )------------ >

>----------------------------------------------------------------- >

                 |                                              |

                  ---- Parameter Name( Variable Name ) ---- ) -–

                   |                                     |

                    --------------------<----------------

C#

   public class EventArgs1

   {

      private String         mName;

 

      public EventArgs1() {   }

 

      public String Name

      {

         get { return mName; }

         set { mName = value; }

      }

   }

 

   Public class EventTests

   {

      public event MyEventDelegate MyEvent;

      public delegate void MyEventDelegate( String str, EventArgs1 eventArgs );

   }

 

RDML

   Define_Com Class(#DOTNET1.TestClasses.EventTests) Name(#EventTest)

 

   Evtroutine Handling(#EventTest.MyEvent) Str(#s1) EventArgs(#c1)

      #STD_TEXT := #s1

      #STD_NAME := #c1.Name

   Endroutine