CType(sender, PictureBox)とは?

タグの編集
投稿者 たけ  () 投稿日時 2008/8/21 19:16:00
http://dobon.net/vb/dotnet/graphics/zoominout.html 
上記のサイトのサンプルで意味が理解できかねる部分が 
ありますのでご教授願います。 
'PictureBox1のMouseDownイベントハンドラ 
Private Sub PictureBox1_MouseDown(ByVal sender As Object, _ 
    ByVal e As System.Windows.Forms.MouseEventArgs) _ 
    Handles PictureBox1.MouseDown 
    Dim pb As PictureBox = CType(sender, PictureBox) 
    'クリックされた位置を画像上の位置に変換 
    Dim imgPoint As New Point(CInt((e.X - imgRect.X) / ratio), _ 
        CInt((e.Y - imgRect.Y) / ratio)) 
 
 
下記のコードは、どういう意味なのでしょうか? 
Dim pb As PictureBox = CType(sender, PictureBox)
投稿者 るしぇ  () 投稿日時 2008/8/21 20:11:00
関数の意味はコードを選択状態にして[F1]キーを押せば  
ヘルプが表示されて分かるはずでは?  
 
ついでに MouseDown イベントも調べて、引数の  
sender に何が格納されているか調べれば分かる話では?  
…と思ったけど  
[Control.MouseDown イベント] 
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.mousedown(VS.80).aspx 
引数の説明書いてないね。  
[イベントの利用]  
http://msdn.microsoft.com/ja-jp/library/2ccyd347(VS.80).aspx  
>sender パラメータおよびイベント引数パラメータは、イベント ハンドラに  
>マウス イベントについての詳細情報を提供します。  
>sender オブジェクトは、イベントの発生元を示します。  
この辺か。。。  
 
提示のコードでは MouseDown イベントを起こした PictureBox1  
の参照アドレスが入っています。
投稿者 るきお  () 投稿日時 2008/8/21 21:38:00
たけさんが提示されたコードがけ見ると、 
Dim pb As PictureBox = CType(sender, PictureBox)  
は無意味ですね。 
変数pbをどこにも使っていないですよね。 
 
それで、リンク先のサンプルプログラムを見てみました。 
そのサンプルでpbとなっている部分はすべてPictureBox1と書いても動作します。 
 
では、どうして 
Dim pb As PictureBox = CType(sender, PictureBox)  
と書いてあるのかは、ちょっと話が長くなるので焦点を絞りたいのですが、 
①CTypeについて知りたいでしょうか? 
②senderについて知りたいでしょうか? 
③pbという変数を使う意義について知りたいでしょうか? 
④=senderではなく=CType(sender, PictureBox)としていることの意味について知りたいでしょうか? 
⑤それとも…? 
 
ここでは簡単に書いておきます。 
①→型変換を行っています。ここではObject型かたPictureBox型への変換です。 
②→イベントを発生させたオブジェクトを表しています。ここではPictureBox1を意味することになります。 
③→たとえば、型変換が必要は個所でいちいち変換していると効率が悪いので、最初に変換しておいたものを使いまわすなど。他にも意味はあります。 
④→型を明示してプログラミング動作の安全性を高める趣旨です。必須ではありません。
投稿者 たけ  () 投稿日時 2008/8/21 22:48:00
>>3 
>①CTypeについて知りたいでしょうか?  
>②senderについて知りたいでしょうか?  
>③pbという変数を使う意義について知りたいでしょう 
>か?  
>④=senderではなく=CType(sender, PictureBox)としてい 
>ることの意味について知りたいでしょうか?  
>ここでは簡単に書いておきます。  
>①→型変換を行っています。ここではObject型からPictur>eBox型への変換です。  
 
PictureBox型というデータ型があったのですか。初めて知りました。 
>②→イベントを発生させたオブジェクトを表しています。>ここではPictureBox1を意味することになります。  
>③→たとえば、型変換が必要は個所でいちいち変換してい>ると効率が悪いので、最初に変換しておいたものを使いま>わすなど。他にも意味はあります。  
>④→型を明示してプログラミング動作の安全性を高める趣>旨です。必須ではありません。  
詳しい説明有り難うございます。 
しかし、上記のことは、こちらのサイトにも入門書にも一切書かれてはいないことです。 
MSDNにはもちろん書かれてあるのでしょう。 
日々つまずきの連続で何か、VBの学習が遅々としてすすみません。やはりVBは奥が深いのですね。
投稿者 るしぇ  () 投稿日時 2008/8/22 01:36:00
>しかし、上記のことは、こちらのサイトにも入門書にも一切書かれてはいないことです。  
もともとが DOBON さんとこの Tips で初心者レベルに合わせた内容じゃ 
ないのだから当然では? 
ただ、『一切』ってのは言い過ぎ。 
 
①は関数そのものだから MSDN を見るべき内容です。ただし、型変換(キャスト) 
に関してはエラーの良く出る場所ですし、色々な場面で出てきます。 
[Visual Basic 中学校 > 初級講座 > 第12回 エラーと例外処理] 
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard12.htm 
少しレベルの高くなってきたプログラムの解説には CType も使われてます。 
[Visual Basic 中学校 > 初級講座 > 第29回 2つ目のフォーム] 
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard29.htm 
 
>PictureBox型というデータ型があったのですか。初めて知りました。 
これは全てのコントロールがクラスという知識があって、 
[Visual Basic 中学校 > 初級講座 > 第9回 クラスの使い方] 
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard9.htm 
[Visual Basic 中学校 > 初級講座 > 第4回 変数と型] 
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard4.htm 
>変数pはPen型である 
ということですよね? 
 
②sender についてはイベントをフル活用できるようになって、引数に 
便利な情報がまとめられてることを知ってからですから、中級者以上 
の内容でしょう。 
初心者は 
>そのサンプルでpbとなっている部分はすべてPictureBox1と書いても動作します。
投稿者 るしぇ  () 投稿日時 2008/8/22 01:36:00
③これは常識。 
a = 1 + 2 
a = 1 + 2 
a = 1 + 2 
同じ計算を繰り返して意味あるの?ってだけのこと。CPU が実際に計算するのと 
計算結果を参照するのでは、結果を参照するだけの方が必ず速いです。なぜなら 
実際に計算するためには、計算に使う値をまず参照するからです。 
計算結果を変数に覚えておくのは 
[Visual Basic 中学校 > 初級講座 > 第4回 変数と型] 
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard4.htm 
レベルの話。 
1 + 2 が CType(sender, PictureBox) になったときに計算式に見えなくなるのは 
初心者だからです。ただ、初心者のうちは全て 
>そのサンプルでpbとなっている部分はすべてPictureBox1と書いても動作します。  
でもいい話。無駄な処理だけど分かり易さ重視。上級者のコードとは違うのが 
当然。 
 
④[Visual Basic 中学校 > 初級講座 > 第36回 型の指定] 
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard36.htm 
型が違えば動作が異なる。Option Strict On にすれば型変換は必須の 
内容です。
投稿者 たけ  () 投稿日時 2008/8/22 04:50:00
>>6 
アドバイス有り難うございます。 
私、自分で言うのも何ですが、かれこれVBを初めて11ヶ月になり、幾つかのプログラムも作れるようになって 
おりますが、やはり初心者の域から抜け出せないというか 
中級に達する能力に乏しいのかもしれません。 
基礎から学んできたつもりですが、また一から出直したいと思います。