You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

[ |../../index.htm#lansa/l4wdev07_0370.htm]
現在地:

2.29.2.5 .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テクニカル リファレンスガイド』の「[<span style="color: #0000ee"><span style="text-decoration: underline; ">SET_REF</span></span>|../../../lansa015/Content/lansa/set_ref.htm]」を参照してください。

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 テクニカル リファレンスガイド』の「[<span style="color: #0000ee"><span style="text-decoration: underline; ">EVTROUTINE</span></span>|../../../lansa015/Content/lansa/evtroutine.htm]」を参照してください。コマンドの基本的な構文は以下のようになります。
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
[ |../../index.htm#lansa/l4wdev07_0370.htm]

  • No labels