A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
コントロールやクラスなどで ユーザー定義のイベントを呼び出す必要がある場合です
フォームに貼り付けたボタンなどのClickイベントなどはユーザーが独自にコードを記述できないと面白くありませんよね
この場合にコントロール側で RaiseEventをつかってユーザーが作成したClickイベントが呼ばれるようにします
一例です
クラスモジュール myClassに
Public Event myTest()
Public myTask(VyBal nValue as integer)
dim n as integer
for n = 1 to 1000
if n mod navle = 0 then
' ここでユーザー定義のイベントへ処理を移す
RaiseEvent myTest
end if
next
End Sub
といったコードがあったとします
これを呼び出すフォーム側では
Dim WithEvents oClass as myClass
Sub Command1_Click()
oClass.myTask(100)
End Sub
Sub Form_load()
Set oClass = new myClass
End Sub
Sub oClass_mTest()
MsgBox "myClassから呼ばれました"
End Sub
といったような使い方になります
No.2
- 回答日時:
>RaiseEventを使用しないといけない処理とは、どういうもの?
#1さんはどう思うかわかりませんが、私は、Event化しなければならない処理というものは、とりあえずないと思っています。あなたの疑問は、#1さんの、
>RaiseEvent myTest
の部分は、Call GlobalModule.myTest()などで実装できるはずだ、という事だと思います。ここでGlobalModule.myTest()は、GlobalModuleというModule(Bas)の中にある、myTestというSubroutineです。
その通りです。その通りですが、GlobalModule.myTest()は、Global変数(Applicationレベルの変数)を使うようなものです。構造化プログラミングが全盛の頃、「ちゃんと管理された」Global変数の便利さを強調しすぎて、批難ごうごうになった記憶があります。
でもGlobal機構は便利なんですよね。昔はGlobal機構の「ちゃんとした管理」は、全て自前で行う必要がありました。「自前」であるだけに、それはErrorではなく「Bug」の温床だったのです。
状況を複雑にしているのは、VBではGlobalスコープを、そのままでは使用できない事です。それでModuleなどを用意し、そこにPublicな変数や関数を用意して、あたかもGlobalなように扱います。じっさい先のGlobalModule.myTest()は、myTest()で動くはずです。でもこれは利点なんですよ。「呼び出し先を指定しなくても良い」からです。逆に言うと、それが「Bug」の温床になる原因です。
Eventは、ApplicationのGlobal動作の管理機構です。
(1)RaiseEvent myTestは、呼び出し先を指定していないので、Global機構の便利さを、そのまま使えます。
(2)管理は、Public Event myTest()とDim WithEvents oClass as myClassで行います。
(3)EventとWithEventsの対で、どのGlobal関数が、どこへ接続されるかを管理します。
言葉で言うとわかりにくいのですが、必要に応じて(全てをEvent化せよとは、決して言いません)Eventを導入すると、(1)~(3)の効果として、コードに非常にメリハリが付きます。これは小さい事に見えるかも知れませんが、実際上はとても重要な事です。やってみると、わかります。そして(1)~(3)の応用が、Interface(Implements)とDelegateです。
Event Doriven(Eventを使える事)とObject志向は、本来別物ですが、両者は非常に相性の良いものであり、どちらも「プログラマーに楽させる」ために開発されてきた技術です。なので私は、必要に応じてEventは、どんどん使うべきだと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- スキンケア・エイジングケア 日傘を使用しない理由はなぜですか? 6 2022/07/30 22:36
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- LINE ラインと類似したサービスは? 4 2023/03/21 20:05
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- ガスコンロ・IHクッキングヒーター・給湯器 シャープ製品JH-WB1821 と BCGシャープ共同開発品JH-WB182E の違いについて 1 2023/05/06 20:06
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- 中途・キャリア 契約社員で在職中ですが、正社員目指して転職活動中です。 20代半ばの男です。 2社から内定を頂きまし 5 2022/04/29 13:39
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
このQ&Aを見た人はこんなQ&Aも見ています
-
風水の観点で選ぶ観葉植物とは?置き場所や上げたい運気ごとの注意点を紹介!
観葉植物で運気をアップするコツを、風水デザイン1級建築士の福島昌彦さんに伺った。
-
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
-
4
プロシージャからイベントをコールする
Visual Basic(VBA)
-
5
VB.net Double と Decimal の違い?
Visual Basic(VBA)
-
6
タブキー押下時のイベントをひろいたい。
Visual Basic(VBA)
-
7
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
8
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
9
VB.NETで、DLLを頂いたんですが・・
Visual Basic(VBA)
-
10
Select Case文でこのようなことは可能でしょうか?
Visual Basic(VBA)
-
11
FriendとPublicの違い。。。
Visual Basic(VBA)
-
12
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
13
Handlesについて
Visual Basic(VBA)
-
14
ListBoxで改行したい
Visual Basic(VBA)
-
15
VB.netでDLLを読み込んで実行する際に、スタックを不安定にしていますというエラーが出ます。
Visual Basic(VBA)
-
16
「&HFFFF」「&H1A」とは?
Visual Basic(VBA)
-
17
VB.NETでマウスクリックイベントを発生させたい。
Visual Basic(VBA)
-
18
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
19
DoEventsがやはり分からない
Visual Basic(VBA)
-
20
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
どうやってもFor文を抜けてしま...
-
vbaのエラー対応(実行時エラー...
-
特定の名前のオートシェイプの...
-
条件文でelseはつけるべき?
-
“try/catch”と“if/else”
-
エクセルVBAでロックをかけたい
-
シグナル 6(SIGABRT)とは?
-
エクセル VBAで複数セル選択時...
-
CImage::Loadの戻り値は何でし...
-
iPhoneのニューラルエンジンっ...
-
VBA Vlookup #N/A表示させない方法
-
【Vb.net】プリンタジョブの取得
-
VBA 複数の行を高速で削除する...
-
StatusStripの表示が更新されな...
-
IF文に時間(何時から何時ま...
-
VBAの進捗状況をリアルタイ...
-
private subモジュールを他のモ...
-
特定のファイルを他のプロセス...
-
複数個のTextBoxでいずれかの内...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
特定の名前のオートシェイプの...
-
シグナル 6(SIGABRT)とは?
-
特定のファイルを他のプロセス...
-
ExcelのVBAで、選択したファイ...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
Word VBA。各マクロの間に待ち...
-
【VBA】エラー処理で別プロシー...
-
UWSCのTHREADについて
-
シェルスクリプトでファイル内...
-
ドリブン??
-
Functionで戻り値を複数返す方法
-
iPhoneのニューラルエンジンっ...
-
エクセル VBAで複数セル選択時...
-
COBOL OCCURSで指定したデータ...
-
どうやってもFor文を抜けてしま...
おすすめ情報