プロが教えるわが家の防犯対策術!

初歩的なことで、すいません・・・
以前、覚えていたのですが、ド忘れしてしまいました。

タイトルどおりで、Form1上に配置したTextBox1を、Module1.vb内に書いた関数内で用いるには、TextBox1のみの記述だと、ビルドエラーとなります。
他のモジュールから、Form1上に配置したTextBox1を見るには、どのように指定するのか、ご教授下さい。
よろしくお願いします。


----------以下だと"TextBox1"のところでエラーとなる----------
<Module1.vb>

Sub xxxxx()
 If TextBox1.Text = "0" Then
  ・・・・
 End If
End Sub

A 回答 (3件)

こんにちは、じゃんぬねっと です。



VB.NET なんですから、OOP を意識していただきたいものです。
まず、Form はクラスであり、フォーム内のコントロールは非共有メンバです。

そのため、まず Form が同一インスタンスである必要があります。
Form のインスタンスを確保している変数のスコープが重要ということです。

-- 以下、回答とはちょっと無関係な駄文 --

アクセスする場合はプロパティやメソッドを通してやるべきです。
VB はスコープの初期値が Friend になってますが、OOP を考えると Private であるべきです。

何が言いたいかと言うと、モジュール内で直接触らないでほしいです。
カプセル化の原則が守られていません。

この回答への補足

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

基本的に、フォーム内のコントロールへの参照は、Form1.vb内にPrivateで行えってことですかね?

ちょっと別関数として切り出したかったのですが。

Form1.vb内でコードを記述する場合は、楽に参照できるので、それで行こうと思います。

補足日時:2005/05/12 14:06
    • good
    • 0

最初に


Dim frmForm1 as new Form1
こんな感じにいれてあげればいいんじゃないかな

この回答への補足

ご回答、ありがとうございます。

入れてみましたが、同じく

  『非共有メンバを参照するには、オブジェクト参照が必要です。』

のエラーがビルドされてしまいました。。。

補足日時:2005/05/12 12:06
    • good
    • 0

そのままただ参照するならば、単純に頭に Form1. つけるだけでOKです。



Sub xxxxx()
 If Form1.TextBox1.Text = "0" Then
  ・・・・
 End If
End Sub

この回答への補足

ご回答、ありがとうございます。

そうですよねぇ・・・
私もそう思っていたのですが、ダメなんです。
環境が、VB.NET 2003なので、VB6の指定の仕方ではダメなのでしょうかね?

"Form1.TextBox1.Tex"としても、以下のエラーがビルドされてしまうのです。

  『非共有メンバを参照するには、オブジェクト参照が必要です。』

"Form1"の前に、何か付けないとダメなのでしょうか?

補足日時:2005/05/12 11:05
    • good
    • 0

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