電子書籍の厳選無料作品が豊富!

複数あるテキストボックス(text1、text2…)にキーボードから入力したらメッセージを出すという独自のイベント処理を
共通の関数を使用しようとした時に以下の処理が挙げられるですがこの処理について
<クラスモジュール(MsgEvent)>
Public WithEvents MsgTextBox As TextBox  
Private Sub MsgTextBox_KeyPress(KeyAscii As Integer)
MsgBox MsgTextBox.name ……(1)
End Sub
<フォームモジュール>
Dim Hairetu(1) As New MsgEvent
Private Sub Form_Load()
Set Hairetu(0).MsgTextBox = Text1 ……(2)
Set Hairetu(1).MsgTextBox = Text2
End Sub

上記の(1)についてnameプロパティの意味がわかりません。
調べたら値の取得とあるのですがその値とは(2)で言えば「=text1」にあたるということですか?
それと(2)のSetを定義しないといけない理由がよくわからないのでお教えください。
よろしくお願いします。

A 回答 (2件)

 恐らくVB6をお使いと思います。



 まずコードの構成ですが、<フォームモジュール>側の
  Dim Hairetu(1) As New MsgEvent
で、<クラスモジュール(MsgEvent)>の配列を宣言し、そのPublic変数
  Public WithEvents MsgTextBox As TextBox
にTextBoxであるText1,Text2をそれぞれ渡して、Hairetu(i)とText(i+1)とを接続しています。
  Set Hairetu(i).MsgTextBox = Text(i+1)
の部分ですが、これはMsgEvent型であるHairetu(i)のTextBox型変数MsgTextBoxに、TextBox型のText(i+1)を代入しているだけです。
 TextBox型はクラスなので、そのインスタンスText(i+1)はObject型に属します。VB6では、Object型の代入を行う時には、必ずSetをつける仕様になっています(要するに決まりです)。
  MsgBox MsgTextBox.name
の部分は、Text(i+1)のKeyPress Eventに接続されたはずのMsgTextBox_KeyPress Eventが、本当にText(i+1)に接続されたかどうかの確認メッセージを出しているだけです。
 「値の取得」となっているのは、VBコントロールでは、そのNameプロパティーと変数名は一致するという原則があるので、Nameプロパティーを調べれば、Text(i+1)で表される変数値を調べたのと同じ、という意味です。
 Text(i+1).Name自体は、Text(i+1)に格納されたTextBoxの名前なので、単なる文字列です。

 わかりにくいですよね。
    • good
    • 0
この回答へのお礼

そういうことでしたか。
本当にありがとうございます。

これを機に似たようなケースを自分で考えてみようと思います。

お礼日時:2008/01/21 23:16

WithEventsは入れ物を用意するだけで実体がありません


クラスで定義されたイベント用のオブジェクトが作られるだけなのです

オブジェクトの実体を設定するのがSetステートメントです
nameはTextBoxオブジェクトのプロパティです

フォームに myText1といった名前のテキストボックスがあった場合
Set Hairetu(0).MsgTextBox = myText1
といった具合にします
ここでいう『名前』はプロパティウィンドウの『オブジェクト名』に設定されているものです
    • good
    • 0
この回答へのお礼

わかりやすい回答ありがとうございます。

これを機に自分でいろいろ勉強していこうと思います。

お礼日時:2008/01/21 23:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!