1

データウィンドウフィールドが正の数のみを受け入れるようにしたい。どうやってやるの?

編集

列仕様の検証式システムを使用して列を検証できることはわかっています。Formatしかし、私がプロパティに入れてそれで実行できるフォーマットはありますか?

4

3 に答える 3

2

いいえ、単純な解決策は検証ルールですが、押されたキーを実際にフィルタリングするためのより複雑な解決策が可能です。

まず、userevent(ue_nonnegative)をデータウィンドウ制御イベントpbm_dwnkeyにマップします。

double ld_value
long  ll_row

if this.getcolumnname() = "value" then
    if key = KeySubtract! or key = KeyDash! then
         ll_row = this.GetRow()
         ld_value = this.getitemnumber(ll_row, "value")
        yield() 
         post event ue_filtervalue(ll_row, ld_value)
    else
        yield() 
        accepttext()
    end if
end if

ここで、データウィンドウにはvalueという名前の列があります。「-」が押されているかどうかを確認します。押されている場合は、現在の値を保持し、新しいイベントue_filtervalueが投稿されます。残りのデータウィンドウイベントの後にue_filtervalueイベントが発生するようにするには、yield()が必要です。

ue_filtervalueイベントは、「-」なしで以前の値を復元します。

this.setitem(ad_row, "value", ad_value)
this.SelectText( Len( String(ad_value)) + 1, Len( String(ad_value)) )
于 2010-08-08T17:41:57.080 に答える
1

それで始まるエディットマスクを使用する場合、+正の値のみを受け入れます。プラス記号が表示されますが、これは望ましくない場合があります。

于 2010-08-09T04:16:32.960 に答える
1

Philip Salgannikは、2004-04-27のsybase.public.powerbuilder.datawindowへの投稿でデータウィンドウからキーをインターセプトする方法を示しました。これにより、キーを元に戻すのではなく、実際にフィルタリングします。

PeekMessageの外部関数を宣言します(古いPBの場合はPeekMessageAを使用します)::

function boolean PeekMessage( Ref blob lpMsg, long hWnd, UINT uMsgFilterMin, UINT  uMsgFilterMax, UINT  wRemoveMsg ) Library "USER32.dll" alias for "PeekMessageW"
//WM_KEYFIRST = 0x0100 // 256 
//WM_KEYLAST  = 0x0108 // 264 
//PM_REMOVE = 1 

pbm_dwnkeyイベントをマップし、keyまたはue_keyあなたの哲学に従って名前を付けます。次のコードをイベントに追加します。

if 0 = keyflags and (key = KeyDash! or key = KeySubtract!) then
   choose case ls_col
      case "col_1", "col_2"   // ... we have many columns in the list
         PeekMessage( Msg, 0, 256, 264, 1 )   // see the declaration for values. this removes the message.
         message.processed=TRUE 
         message.returnvalue=1 
         return
      case else
         // nothing else
   end choose
end if

これを正しくフォーマットするために何度か試しましたが、成功しませんでした。

message.processedとmessage.returnvalueの設定が効果があるかどうかはわかりません。通常、このイベントからではありません。実験する時間がなかったので、コードを使用するときにそれらを保持しました。

于 2011-07-29T21:31:50.633 に答える