値を常に監視するには?


kim_hen  2004-12-11 00:15:53  No: 118180

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

例ですが、

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

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


いな  2004-12-11 00:24:57  No: 118181

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

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

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


de  2004-12-11 00:38:04  No: 118182

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

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

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


魔界の仮面弁士  2004-12-11 08:41:30  No: 118183

ええと…。
> 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 14:48:59  No: 118184

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

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

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

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


  2004-12-13 19:44:06  No: 118185

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


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加