はじめまして、皆さんのアドバイスをいただきたく、質問させてください。
現在アプリケーションを開発中なのですが、教えていただきたいのは、定義してある式の値(状態)が変化したら、イベントを起こす、ということをやりたいのです。しかもアプリケーションが起動している間、ずっとそのプログラムで監視したいのですが・・・。
例ですが、
dmy = TDD_GetToneStat(0)
if dmy <> 0 Then
Call Form_unLoad
End If
という条件式なのですが、dmy=0が正常で、値が0以外になったらForm_unloadをCallするといった感じです。常にアプリケーションを監視したいのですが、どのような方法がありますでしょうか?
#設計ミスのような気がしますなぁ
頭を使わない簡単なやり方で・・・。
たとえば、Dmy.textという項目を非表示(Visible=False)で一つ用意します。
値が変わったときにはChangeイベントが発生しますね。
変化を感知したいならば、
最初っから変数を使用して面倒な処理を行うのではなく
コントロールにすれば簡単なのです
ってこんなやり方じゃ、駄目かなぁ
その様な場合は変数では無理です。
クラスを使用してください。
例えばClass1というクラスモジュールを追加して
あるプロパティの値が変化したらRaiseEventで
イベントを起こすように作るといいです。
で、FormのGeneralセクションにWithEventsを伴って
クラスオブジェクトの宣言をしてやると出来ます。
ええと…。
> 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
------------------------------
なんだか読めば読むほどkim_henさんの質問が気になって・・
ついつい横からすみません。
質問のもそもそもの動機がよくわからないんです。
文意に忠実に「イベント」をいつでも察知させ何か「コト」を起こす
のであればやはりdeさんの言うとおり、クラス作って、
RaiseEvent→WithEventsと思います。
でも待って。そもそもある条件の時だけにForm_unLoadしたいだけの
ことですよね?
いなさんの言う設計ミスなのかなあ?
だったらもともとの仕様を見直していけば、つまり、
もともとどういう状況になったら、値が0以外になるのか
って考えたらいいので、あーそうだ、
だから魔界の仮面弁士さんの言うdmyという変数で扱うのでなくて
プロパティで扱えば・・、あ、できるできる!
おかげさまで「もやっと」が「すっきり」になりました。
kim_henさんが「すっきり」「解決」されてないんだと
勝手に思ってみなさんのレスの補足してみました??
まぁあれだ。
マルチポストするだけの
暇があれば、自分で考えろや。
ツイート | ![]() |