3

レコードがデータベースに保存されたら、ユーザーがそのフィールドに入力した場合にコミットされていない変更を行ったことを示すために、フィールドの色を変更したいと考えています。

closeField に foreColor を設定するのが最善ですか、それともキーを押すたびに追跡して、前のフィールドの内容を含む変数と比較する方がよいですか?

4

3 に答える 3

4

フィールド データをロードするプロセスが実行され、保存されていない新しいデータが入力されると、テキストの変更を検出する方法を尋ねていますか? あなたはコミットされていない新しい変更について言及しましたが、あなたが何を考えているのかわかりません。これは、closeField ハンドラーを使用しても、「そのフィールドに入力してもコミットされていない変更」を示さないことを意味します。

ただし、そうであれば、データベースへの書き込み時にフィールドのカスタム プロパティを設定し、フィールド スクリプトに単純なハンドラーを配置します。

on textChanged
   if me <> the lastText of me then set the foreColor of me to "blue"
end textChanged

このプロパティは "the lastText" という名前で、データベースに保存されるハンドラーによって設定されます。

set the lastText of field "yourField" to field "yourField"

そのフィールド内で何かが編集されると、色が青に変わります。もちろん、保存ハンドラも色を黒に戻す必要があります。

于 2013-03-11T03:13:20.953 に答える
1

glx2 では、実際には少しやり過ぎです。フィールドを保存するときにフィールドの md5digest を保存し、フィールドの md5digest を保存された値と照合して、保存が必要かどうかを確認します。明らかに、どんなに高速であっても、キーを押すたびに計算を実行したくありません。OSXで別のアプリをクリックしてもcloseFieldがトリガーされないという問題が過去にあったことを覚えているようですが、closeFieldでそれを行うことはそれに対処する良い方法です。

于 2013-03-12T21:46:55.047 に答える
1

フォームのすべてのフィールドを処理するカード レベルのスクリプトを次に示します。データをカードにロードするときは、各フィールドの uOriginalText カスタム プロパティを、フィールドにロードされたテキストと同じ値に設定します。

on closeField
   # the target control for this message
   put the target into tTarget

   # detect case changes like 'mr jobs' to 'Mr Jobs'
   set the caseSensitive to true

   # compare with the original text, set when the form was loaded
   if the text of tTarget <> the uOriginalText of tTarget then
      # indicate the change - I've used backColor in case the field is now empty
      set the backColor of tTarget to "red"
   else
      # clear warning background color
      set the backColor of tTarget to empty
   end if
end closeField
于 2013-03-11T07:20:52.663 に答える