複数あるテキストボックス(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を定義しないといけない理由がよくわからないのでお教えください。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
恐らく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の名前なので、単なる文字列です。
わかりにくいですよね。
No.2
- 回答日時:
WithEventsは入れ物を用意するだけで実体がありません
クラスで定義されたイベント用のオブジェクトが作られるだけなのです
オブジェクトの実体を設定するのがSetステートメントです
nameはTextBoxオブジェクトのプロパティです
フォームに myText1といった名前のテキストボックスがあった場合
Set Hairetu(0).MsgTextBox = myText1
といった具合にします
ここでいう『名前』はプロパティウィンドウの『オブジェクト名』に設定されているものです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 同じ名前のオブジェクトを...
-
パワーポイントのVBAでテキスト...
-
EXCEL VBAにて動的にCheckBOXを...
-
Excelで =EMBED("Acrobat Docu...
-
VBAのWindowオブジェクトとWork...
-
COMコンポーネントって何?
-
質問すいません。 javascriptの...
-
JqueryとPrototypeの比較
-
C++でのクラスオブジェクトの破棄
-
LISTBOXの内容が更新されま...
-
ヘッダファイルにおける文字列...
-
Accessの連結・非連結オブジェ...
-
ワイルドカード<?>と型パラメー...
-
ビジュアルC++でボタンの有...
-
JSPのout.printについて
-
ResultSet での問題
-
WithEventsの処理について
-
C# Proxyを通してブラウザを開...
-
Vbで通常使用するプリンターを...
-
VBSでのステートメントの末尾が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0 == False はいいけど
-
パワーポイントのVBAでテキスト...
-
C#でフォームのオブジェクト名...
-
Excelで =EMBED("Acrobat Docu...
-
VBAのWindowオブジェクトとWork...
-
JAVAからHTMLへ値を返す方法
-
EXCEL VBAにて動的にCheckBOXを...
-
ワイルドカード<?>と型パラメー...
-
COMコンポーネントって何?
-
VBA 同じ名前のオブジェクトを...
-
Object型からDouble型へのキャスト
-
ビジュアルC++でボタンの有...
-
error C2712: オブジェクト ア...
-
オブジェクト名をforループ内で...
-
bmp画像をjpegやpng画像に圧縮...
-
戻り値がクラスオブジェクト
-
Vbで通常使用するプリンターを...
-
時間帯判定をする。
-
Webアプリケーションのエラーメ...
-
LISTBOXの内容が更新されま...
おすすめ情報