tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: CTYPEとは?
投稿日: 2007/06/03(Sun) 18:03
投稿者よねKEN
> ヘルプなどで、CTYPEについて調べているのですが難しい言葉などがあり理解できません。

例えば、どんな単語が難しいですか?
#私が説明をしてみても、その「難しい言葉」を使ってしまっては元も子もないので。

> 簡単に一言で言うとどういう場合に使うのでしょうか?今は意味もわからずに使っています。

一言で言うなら「型変換」です。
が、この言葉も含めてわかりづらいと感じているようですので、
一言で表すのは難しいですね。

>   Private Sub txtA1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
>   txtA1.GotFocus, _
>   txtA2.GotFocus
>
>     Debug.Print(CType(sender, TextBox).Name)
>
>   End Sub
>
> このように自分自身のプロパティが何?という場合に使用していますがヘルプなどを見ると型変換などと記述されていて用途が違うようにも思えます。

senderの型は「ByVal sender As Object」という記述からObject型です。
Object型にはNameプロパティというものは持っていませんね。
で、このソースコードでは変数senderの中身はTextBox型のインスタンスであるとわかっているので、
CType関数を使って、Object型である変数senderから
実際のその中身のインスタンスの型であるTextBox型へ変換しています。

TextBox型にはNameプロパティがあるので、.Nameのように記述を続けて、
Nameプロパティを参照することができます。

> しかし、
>     Debug.Print(sender.Name)
> このような書き方をしても、取得されるみたいなのですが、

提示ソースコードでCType関数を使って行っていることと同じようなことを
VBが暗黙に行っているから、取得できるようになっています。
VBでも暗黙の型変換を禁止する(ソースコード先頭にOption Strict Onを記述する)と
上記のような型を意識しない記述はエラーになります。

> sender. と入力をすると、小さな窓がでますが、プロパティなどは表示されません。

senderはObject型なので小さな窓(インテリセンスといいます)にはObject型に関する情報しか表示されません。
つまり、Nameプロパティは表示されません。

> でも、CTYPE( と書くと、プロパティなども表示されます。

明示的に型変換を行っているため、TextBox型に対するプロパティ等が表示されます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。