- ベストアンサー
VBのクラスを使ったTextBoxへの文字表示方法は?
- VBの初心者がクラスを使ってTextBoxに文字を表示させる方法を教えてください。
- 具体的には、FormにTextBoxとコマンドボタンを配置し、ボタンクリックでTextBoxに文字を表示させる方法です。
- 現在、引数の型が違うというエラーメッセージが表示されており、解決方法が分かりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> obj.kakikomi (Text1) 間違えやすいところですが、引数が括弧で括られているため、上記の構文は、 Call obj.kakikomi((Text1)) と同義になり、更に、 Call obj.kakikomi(Text1.Text) と同義となります。 つまり、TextBoxへの参照が渡されているのではなく、TextBox.Text (つまり、文字列) が渡されていることになります。 このことは、以下の方法で確認できます。 WriteA.kakikomi メソッドの引数を TextA As TextBox ↓ TextA As Variant に変更 (バリアントならどんな引数を受け入れてもエラーとならない) し、メソッドの最初の1行に Call MsgBox(TypeName(TextA)) を追加。 ( 実行すると、"String"と表示されるはずです ) という訳で、正しい記述は、 (1) obj.kakikomi Text1 (2) Call obj.kakikomi(Text1) のどちらかです。 ※ TextA を Variant に変更するのは、意図しない型をTypeName関数で検知する目的です。言うまでもなく、一般論としてはVariant型の使用は推奨されません。 テスト結果に納得されたら、元通りTextBox型に戻してください。
その他の回答 (1)
No.2を要約すると、「引数を ( ) で括ると値渡しになる」ということです。 対象となる引数がオブジェクトの場合、アドレス (ポインタ) のコピーではなく、デフォルトプロパティの値がコピーされて渡されるので、間違えやすいところです。
お礼
ありがとうございました。obj.kakikomi Text1でうまくいきました。この回答を見る前に、呼び出し側で引数なしにして(obj.kakikomi)メソッド内部でForm1.Text1.Text="ABC"というふうにしていました。