4D リストボックス 列の移動をできなくしたい

リストボックス 列の移動をできなくしたい

フォームにリストボックスを配置して列数を2以上にすると、実行モードではユーザが列を移動することができます。実行モードでリストボックスの列(ヘッダ部分)をドラッグすると、列の順番を変えることができる、という機能です。

プログラマとしては何もコードを書かずにこの機能を提供できるのはいいことですが、たまにこの機能を抑制したい時があります。つまりユーザに列の入れ替えをしてほしくないケースです。

例えば、次の例では、勘定科目の金額は借方金額の方が左の列、貸方金額が右の列に並んでいます。これを次のようにドラッグして貸方金額を左に移動させることができてしまいます。これは抑止したいところです。会計の世界では「借方金額は左」と決まっているからです。

図1 借方金額は左
図2 ドラッグして移動中
図3 借方と貸方が入れ替わってしまった!

 

対策:

リストボックスのプロパティで「ドラッグしない列数」に「列数」と同じ数値を入力します。数値が異なる場合はどうなるかというと、左からN個目までが移動できない列になります。

http://doc.4d.com/4Dv16/4D/16.1/List-box-specific-properties.300-3373463.ja.html

プロパティリスト
図 リストボックスを選択して表示したプロパティリストの一部

現在の「ドラッグで移動しない列数」は次のコマンドで取得できます。

LISTBOX Get static columns

「ドラッグで移動しない列数」をセットするコマンドは次です。

LISTBOX SET STATIC COLUMNS

参考情報:

リストボックスの機能に「スクロースしない列数」というのがあります。

リスボックスの横スクロールが有効になっている時に、横スクロールすると左側にあった列は左に隠れてしまいます。このように隠れて欲しくない列、つまり左側にいつも表示していたい列を指定する機能です。フォームエディタではプロパティリストの「リストボックス」の「スクロールしない列数」に数値を入力することで指定します。

このほかリストボックスの機能に「スクロースしない列数」というのがあります。

列数が多かったり、列幅が大きい列がある場合、リスボックスは横スクロールが有効になります。ことのきにスクロールして欲しくない列、つまり左側にいつも表示していたい列を「スクロールしない列数」と呼びます。

フォームエディタではプロパティリストの「リストボックス」の「スクロールしない列数」に数値を入力することで指定します。

4D リストボックスの任意のセルに色を付ける

リストボックス : 文字に色を付ける方法

行全体が同じ色でいいなら、プロパティで「行フォントカラー配列」に、たとえば名前が「vCH01_lstCH_FontColors」のようなlongintの配列を用意して、プロパティに指定します。同様に背景色も行単位で指定することができます。

listbox_properties

それでは、この行のこの列だけ赤色で表示したい、場合はどうすればいいのでしょうか。次です。

1.リストボックスのオブジェクトプロパティで「マルチスタイル」をチェック

listbox_column_properties

2.表示列は文字列で宣言

ARRAY TEXT(vCH01_lstCH_DATEstr;0)

3.次のソースを追加

// 20160321 wat 会社は赤色で表示

C_POINTER($pColumn3)

$pColumn3:=OBJECT Get pointer(Object named;”vCH01_lstCH_DATEstr”)

C_LONGINT($sizeOfAry;$i)

$sizeOfAry:=Size of array(vCH01_lstCH_DATEstr)

For ($i;1;$sizeOfAry)

If (vCH01_lstCH_KUBUN{$i}=”会社”)

$pColumn3->{$i}:=”“+String(vCH01_lstCH_DATE{$i})+”

Else

$pColumn3->{$i}:=”“+String(vCH01_lstCH_DATE{$i})+”

End if

このように、リストボックスの列にマルチスタイルに指定すると、セルごとに異なるHTMLタグを指定/表示できるようになります。

listbox_color

例では、vCH01_lstCH_DATEstrの列を表示して、日付型であるvCH01_lstCH_DATE列は非表示にしています。

元のサンプルは4D社からv13のソースを入手、v15でも動作確認済みです。