フィールド変数の省略値とフィールド・ビジュアライゼーションのピックリストの省略時項目

フィールドに省略値を設定できるように、フィールドのピックリストにも省略時項目を設定できます。一方を変更するときは、もう一方もそれに合わせて変更する必要がないか、注意する必要があります。

例えば以下に示すフォームをデバッグ・モードで動作させ、messageコマンドで#EMPSEXの値を調べると、ラジオ・ボタンのいずれかをオンにしていない限り、値は空であることがわかります。フィールドのピックリストには省略時項目が設定されているので、この動作は不適切であるように見えますが、実際には正しい動作です。

フォームの起動時に行われるフィールドの初期化で、#EMPSEXには省略値が設定されます。しかしこの例の場合、(#EMPSEX側には)省略値が指定されていないので、フィールド変数の値は空のままです。一方、画面表示について見ると、空という値は無効なので、ピックリストの処理規則に基づき初期設定が行われます(この場合は省略地の値)。

これは、フィールド値の省略値と、ピックリストの省略時項目の値が一致していない例です。これを解消するためには、#EMPSEXに省略値「M」を設定する必要があります。こうすればフィールド値と画面表示が一致します。 

混乱を避けるため、ピックリストの省略時項目として、フィールドの省略値を与えるようお勧めします。

フォームのソース

FUNCTION OPTIONS(*DIRECT)

BEGIN_COM ROLE(*EXTENDS #PRIM_FORM) CLIENTHEIGHT(306) CLIENTWIDTH(492) LEFT(326) TOP(162)
DEFINE_COM CLASS(#EMPSEX.Visual) NAME(#EMPSEX) DISPLAYPOSITION(1) LEFT(40) PARENT(#COM_OWNER) TABPOSITION(1) TOP(40)
DEFINE_COM CLASS(#PRIM_PHBN) NAME(#PHBN_1) CAPTION('Save') DISPLAYPOSITION(2) LEFT(53) PARENT(#COM_OWNER) TABPOSITION(2) TOP(192)
 
EVTROUTINE handling(#com_owner.Initialize)
SET #com_owner caption(*component_desc)
ENDROUTINE
 
EVTROUTINE HANDLING(#PHBN_1.Click)
message 'Field Sex has a Value?'
ENDROUTINE
END_COM

 

フィールドのソース(EMPSEX Alpha(1))

BEGIN_COM ROLE(*EXTENDS #PRIM_OBJT)

 
BEGIN_COM ROLE(*Visual #PRIM_EVEF) NAME(#VisualEdit) HEIGHT(19) USEPICKLIST(False) WIDTH(178)
 
END_COM
 
* Define Picklist Visualization
BEGIN_COM ROLE(*Visual #PRIM_EVPL) NAME(#PICKLIST) DEFAULTVISUAL(True) HEIGHT(44) MARGINLEFT(50) WIDTH(167)
End_Com
 
* Define the Picklist
BEGIN_COM ROLE(*picklist) NAME(#LIST)
DEFINE_COM CLASS(#PRIM_PKIT) NAME(#ITEM1) CAPTION('Male') DEFAULT(True) PARENT(#LIST) VALUE('M')
DEFINE_COM CLASS(#PRIM_PKIT) NAME(#ITEM2) CAPTION('Female') PARENT(#LIST) VALUE('F')
End_Com
 
BEGIN_COM ROLE(*Visual #PRIM_EVPL) NAME(#Dropdown) APPEARANCE(DropDownList) HEIGHT(69) WIDTH(209)
 
END_COM
END_COM