したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

ユーザ定義関数の不具合

7おんだん:2011/01/26(水) 21:16:28
今日、プロジェクトファイルを圧縮して、指定されたアドレスに
送信しましたので、ご教示のほどよろしくお願いします。

8igoten:2011/01/27(木) 09:36:34
おんだんさんこんにちは、ファイル有難うございました。
早速実行してみました、そして見事にエラーが出ました。
しかしどう見てもコードに不具合は有りません。

そこでおんだんさんのコードから色々な物を取り除きコードを
シンプルな物にしました。
最終的にはフォームの上に2つのImageBoxとButtonが有るだけの
プログラムになりコードは以下になりました。
Private Function PictureBox(ByVal index As Integer) As PictureBox
Return DirectCast(Me.Controls("PictureBox" & index.ToString), PictureBox)
End Function

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
PictureBox1.Image = PictureBox(0).Image
End Sub
もちろんこのコードはエラーにはなりません。
所が驚いたことに、フォームにGroupBoxを置いてその中にPictureBoxを置くと
おんだんさん指摘のエラーが出ます。
この現象はGroupBoxだけではなくPanelやTabControlのコンテナと呼ばれる物に
PictureBoxを載せると発生します。
(おんだんさんのコードもPictureBoxをGroupBoxから出すと正常に
動作すると思います。)
続く..

9igoten:2011/01/27(木) 09:37:12
続き
そしてこの現象はPictureBoxdだけでなくLabelなどでも同じです。
もちろんコンテナに載せるだけでコードが変わるはずはありませんので
これはVB.NETのバグだと思われます。
その原因はILと呼ばれる中間コードを読んでみなければわかりませんが、
私は読めません。

実は私はMicroSoftのサポートに2回アクセスする権利を持っていますが、
この件でこの権利を行使したくありません。
そこでどこかILが読める人の掲示板で聞いてみたいと思います。
(たぶんコンテナに載せた時に配列として処理しているのだと思われますが。)
何か分かりましたら書き込みます。

10igoten:2011/01/27(木) 10:19:19
早速他の掲示板に回答が書かれました。
『Control.Controls プロパティは、自分の直接の子供となるコントロールしか格納していません。』
と言うことだそうです。そこで
Private Function PicBox(ByVal index As Integer) As PictureBox
Return DirectCast(Me.GroupBox1.Controls("PicBox" & index.ToString), PictureBox)
End Function
とコードを書き換えたら正常に動作しました。
私もまだ未熟です。

11おんだん:2011/01/28(金) 11:29:28
いろいろと面倒をおかけして、申し訳ありませんでした。
今、勤務先ですので帰宅してから、ご教示していただいた部分を
修正し、実行したいと思います。
プログラムというものは、本当に奥が深く、繊細なものだという
ことを改めて感じました。
本当にありがとうございました。これからもご教示していただけ
れば幸いです。

12おんだん:2011/01/29(土) 14:18:22
帰宅してから自宅のPCで実行しました。そうすると正常に稼働しました。
本当にびっくりしました。
Visual Basicの奥深さと難しさに改めて感じました。
これで新たな気持ちでプログラミングができるようになりました。
大変ご面倒をおかけしたり、時間を割いて頂き、調べて頂き、本当に
ありがとうございました。改めて感謝申し上げます。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板