【コントロール配列のイベントを受け取る方法】宜しくお願いします。


さきこ  2004-09-02 06:01:01  No: 116083

下記のようにしてコントロール配列のイベントを受け取りたいのですが、
うまくいきません。

※コントロール配列にすると
「オブジェクトまたはクラスがこのイベントをサポートしていません」
とエラーになります。

※WithEventsでむりでしょうか?
  他に方法はないのでしょうか?

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
コントロール配列のイベント処理を共通で処理したいのですが・・・。

  ご教授ください。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

【フォームの処理】
Private clsTest As Class1

Private Sub Form_Load()

    Set clsTest = New Class1
    ’ここでエラーになります。 Text1としてもダメでした。
    Set clsTest.txt_Text = Text1.Item(0)

End Sub

【クラスの処理】
Public WithEvents txt_Text   As TextBox

Private Sub txt_Text_GotFocus()

    MsgBox "txt_Text_GotFocus"

End Sub


oku  URL  2004-09-02 06:57:05  No: 116084

VB6と仮定してお答えします。
こんな感じでだめですか?
もしクラスでやる場合は、コントロール配列はだめだったような…

Private Sub Form_Load()
    Dim intIndex    As Integer

    For intIndex = 1 To 4
        Load Text1(intIndex)
        With Text1(intIndex)
            .Top = Text1(intIndex - 1).Top + Text1(intIndex - 1).Height + 50
            .Visible = True
        End With
    Next intIndex
End Sub

Private Sub Text1_GotFocus(Index As Integer)
    MsgBox Index & "GotFocus"
End Sub


くま  2004-09-02 06:58:24  No: 116085

過去ログに同じような質問がありました。

http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200407/04070056.txt

結論から言うとコントロール配列のイベントはWithEventsではとれません。
別の方法を考えてください。


魔界の仮面弁士  2004-09-02 07:47:56  No: 116086

結論から言うと『できません』。

イベント引数が違う事からもわかりますように、
「通常のTextBox」と「コントロール配列のTextBox」は、
実際には別の種類のコントロールです。

「コントロール配列のTextBox」は、「通常のTextBox」から派生しているため、
どちらも『Private X As TextBox』な変数に格納する事ができます。しかし、
WithEvents 付きの変数に格納した場合には、実行時エラーとなります。

これは、コントロール配列に限った話ではなく、自作クラスでも起きる現象です。

'===== クラスモジュール [BaseClass] (基本となるクラス)
Option Explicit
Public Event Completed()
Public Sub Finish()
End Sub

'===== クラスモジュール [DerivedClass] (派生クラス)
Option Explicit
Implements BaseClass
Public Event Completed()
Private Sub BaseClass_Finish()
     RaiseEvent Completed
End Sub

'===== フォームモジュール [Form1] (呼び出し側)
Option Explicit
Private WithEvents BC As BaseClass
Private WithEvents DC As DerivedClass
Private Sub Command1_Click()
    Set DC = New DerivedClass
    Set BC = New BaseClass
    Set BC = DC     '←実行時エラー459
    BC.Finish
    Set BC = Nothing
    Set DC = Nothing
End Sub


さきこ  2004-09-02 19:01:07  No: 116087

みなさん書込みありがとうございました。

コントロール配列(自作クラス)のWithEventsはできないようですね。
残念です。

-----------------------------------------------
okuさんの件について
-----------------------------------------------
動的にコントロール配列を作る方法ですね。
各フォーム内であれば有効だと思いますが、
全てのフォームの処理を共通処理としたいので。。。
案をありがとうございました。

※各画面ごとに、イベントで同じ処理を書いていますので
  どうにかして共通化したかったもので。。。

  同じイベントを全ての画面で書くのも大変でしたので。。。
  イベントを共通化しようと考えました。

  コントロールにしない方法でやるしかないですかね。

ありがとうございました。


oku  URL  2004-09-03 07:15:56  No: 116088

処理内容が全く同じならユーザーコントロールを作るとか。
Indexで処理を分岐したい場合は、だめですけど…


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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