tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB2005におけるクラス
記事No4417
投稿日: 2006/10/13(Fri) 13:45
投稿者れんげ
はじめまして。
いつも大変参考にさせて頂いております。

本日はVB2005のクラスについて
お尋ねしたいことがあり、
投稿させていただきます。

Formにあるコントロールのプロパティを
ソリューションエクスプローラに新しく作成したクラスで設定を変更したいのですが、
コントロールの修飾子をFriendやPublic(コントロールのプロパティ、Modifiersから設定)にしていても、
通常通り呼び出す(例:Label1.Text = "てすと")と、エラーになる理由がよくわかりません。

調べていくと、GetやSet構文を設けることにより、
値の参照、変更ができることはわかったのですが、
いちいちプロパティをコードで設定する理由がよくわかりません。

どなたかこの辺のことがわかる方がいらっしゃいましたら、
ご教授いただけますよう、よろしくお願い申し上げます。


以下、本文内容の具体例)

1.フォームにラベルコントロール(Label1)を置く。

2.ソリューションエクスプローラからクラスを新規に作成する。

3.新規に作ったクラスで以下のコードを書くとエラーになる理由。

Public Class Class1

    Label1.Text = "てすと"

End Class

[ツリー表示へ]
タイトルRe: VB2005におけるクラス
記事No4418
投稿日: 2006/10/13(Fri) 15:08
投稿者GOD
> 以下、本文内容の具体例)
>
> 1.フォームにラベルコントロール(Label1)を置く。
>
> 2.ソリューションエクスプローラからクラスを新規に作成する。
>
> 3.新規に作ったクラスで以下のコードを書くとエラーになる理由。
>
> Public Class Class1
>
>     Label1.Text = "てすと"
>
> End Class
>
Class1 内で Label1 が定義されていないからですね。
上記例では、Label1 はフォームクラス(Form1?)に属しているので↓のように指定してあげれば出来ませんか?
Public Class Class1
    Public Sub New()
        Form1.Label1.Text = "テスト"
    End Sub
End Class

[ツリー表示へ]
タイトルRe^2: VB2005におけるクラス
記事No4419
投稿日: 2006/10/13(Fri) 15:53
投稿者るしぇ
>     Label1.Text = "てすと"
じゃあ、Form1 と Form2 に Label1 を貼り付けたら
どちらの Label1 を指しますか?

[クラスビュー]にツリー構造が表示されるんじゃないかと
思うんだけど、内部はこんな構造になってます。
つまりはコントロールがいくら外部に公開されてても、
どこのラベルのことなんだか不明なプログラムで実行
なんかできないよってことです。

ですからGODさんの言うように
>        Form1.Label1.Text = "テスト"
と場所が特定できるような書き方が必要なわけです。

インポートとかすればそれっぽく書くこともできるかも
しれませんが、まず、しませんね。
# [VB6.0]時代にフォームのクラス名を直接指定して
# 非表示のフォームができてプログラムが終了しなくなる
# 現象はまた頻繁に起こるのでしょうかねぇ。変数を
# 用意してインスタンスを意識したコードを示したほうが
# 良くないですかねぇ。。。

[ツリー表示へ]
タイトルRe^3: VB2005におけるクラス
記事No4427
投稿日: 2006/10/14(Sat) 10:08
投稿者れんげ
GODさん、るしぇさんご返信ありがとうございます。

そして、大変な間違いをしていたようで
お恥ずかしい限りです、申し訳ありません。

まず、先の投稿で書いたコードですが、

誤 Label1.Text = "てすと"
      ↓
正 Form1.Label1.Text = "てすと"

と書いたつもりでした。

そしてうまくいかなかった原因は、
メソッドではなく、クラスの中で手続きを書いてしまっていたからですね。
GODさんのコードを見て自分の誤りに気付きました、ありがとうございます。
すべてお二人のおっしゃる通りです、お騒がせしました。

[ツリー表示へ]