値を常に監視するには?


kim_hen  2004-12-10 15:15:53  No: 118180  IP: [192.*.*.*]

はじめまして、皆さんのアドバイスをいただきたく、質問させてください。
現在アプリケーションを開発中なのですが、教えていただきたいのは、定義してある式の値(状態)が変化したら、イベントを起こす、ということをやりたいのです。しかもアプリケーションが起動している間、ずっとそのプログラムで監視したいのですが・・・。

例ですが、

dmy = TDD_GetToneStat(0)
     if dmy <> 0 Then 
        Call Form_unLoad
     End If

という条件式なのですが、dmy=0が正常で、値が0以外になったらForm_unloadをCallするといった感じです。常にアプリケーションを監視したいのですが、どのような方法がありますでしょうか?

編集 削除
いな  2004-12-10 15:24:57  No: 118181  IP: [192.*.*.*]

#設計ミスのような気がしますなぁ

頭を使わない簡単なやり方で・・・。
たとえば、Dmy.textという項目を非表示(Visible=False)で一つ用意します。
値が変わったときにはChangeイベントが発生しますね。

変化を感知したいならば、
最初っから変数を使用して面倒な処理を行うのではなく
コントロールにすれば簡単なのです
ってこんなやり方じゃ、駄目かなぁ

編集 削除
de  2004-12-10 15:38:04  No: 118182  IP: [192.*.*.*]

その様な場合は変数では無理です。
クラスを使用してください。

例えばClass1というクラスモジュールを追加して
あるプロパティの値が変化したらRaiseEventで
イベントを起こすように作るといいです。

で、FormのGeneralセクションにWithEventsを伴って
クラスオブジェクトの宣言をしてやると出来ます。

編集 削除
魔界の仮面弁士  2004-12-10 23:41:30  No: 118183  IP: [192.*.*.*]

ええと…。
> dmy = TDD_GetToneStat(0)
を実行したときに、dmyに0が代入された時に、
特定のプロシージャがCallされればよいのでしょうか?


だとしたら、「dmyという変数」にするのではなく、
「dmyというプロパティ」にするのが簡単かと思います。

たとえば、こんな感じですかね。

dmyがフォームレベルの変数なら、フォームモジュールに。
dmyがグローバル変数なら、標準モジュールに宣言してみてください。
(変数dmyを利用していた部分のコードは、修正不要です)

------------------------------
Private dmy_ As Long
Public Property Get dmy() As Long
    dmy = dmy_
End Property
Public Property Let dmy(ByVal vNewValue As Long)
    dmy_ = vNewValue
    If dmy_ = 0 Then
        MsgBox "0が代入された時の処理"
    End If
End Property
------------------------------

編集 削除
たくみ  2004-12-13 05:48:59  No: 118184  IP: [192.*.*.*]

なんだか読めば読むほどkim_henさんの質問が気になって・・
ついつい横からすみません。

質問のもそもそもの動機がよくわからないんです。
文意に忠実に「イベント」をいつでも察知させ何か「コト」を起こす
のであればやはりdeさんの言うとおり、クラス作って、
RaiseEvent→WithEventsと思います。
でも待って。そもそもある条件の時だけにForm_unLoadしたいだけの
ことですよね?

いなさんの言う設計ミスなのかなあ?
だったらもともとの仕様を見直していけば、つまり、
もともとどういう状況になったら、値が0以外になるのか
って考えたらいいので、あーそうだ、
だから魔界の仮面弁士さんの言うdmyという変数で扱うのでなくて
プロパティで扱えば・・、あ、できるできる!
おかげさまで「もやっと」が「すっきり」になりました。

kim_henさんが「すっきり」「解決」されてないんだと
勝手に思ってみなさんのレスの補足してみました??

編集 削除
 2004-12-13 10:44:06  No: 118185  IP: [192.*.*.*]

まぁあれだ。
マルチポストするだけの
暇があれば、自分で考えろや。

編集 削除