複数Controlの制御に関して への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 Nepia  (社会人) 投稿日時 2010/8/30 09:55:03
返事が遅くなって大変申し訳有りません。

YAS 様

>コードをよく見て,VB6だと気づくべきでした。
私が記述すべきことが足りませんでした。
申し訳有りませんでした。

neptune 様

>どこに記載しているのかもリンク貼って下さいね。
大変申し訳有りませんでした。
次回質問させていただく際には参考にしたURLを
記述するようにいたします。

よねKEN 様

>http://homepage1.nifty.com/rucio/main/technique/ShareEvent.htm
参考URLありがとうございます。
このページの観覧をしておりませんでした。
中級講座でとまっておりました。
申し訳有りませんでした。

皆様の意見を参考に作成することが出来ました。
ありがとうございました。

*現在は、PictureBoxでの作成を行っております。
PictureBox自体に表示すると、ドットの関係により
描画が小さくなってしまいました・・・
拡大、縮小の勉強をし、どうしても行き詰ってしまった際には、
申し訳有りませんが、またご助力お願いいたします。
投稿者 neptune  (社会人) 投稿日時 2010/8/28 11:15:00
よねKEN さん ご指摘ありがとうございます。

Nepiaさんの最初のソースを・・・・良く見てなかった m(_ _)m
何故かしらclass側の
 as picturebox
の宣言が頭にこびりついていたようです。

Nepiaさん>
という事で、
投稿者 neptune   (社会人)   投稿日時 2010/8/27 22:06:40
についてはピント外れという事で無視して下さい。

#Class側でpictureboxを動的に作成しても良いんですが、位置計算も必要なり鬱陶しいので
#やっぱり魔界の仮面弁士さんの方法が一番簡単かと思います。
#この辺りも、魔界の仮面弁士さんは考慮されているかと想像してます。
投稿者 よねKEN  (社会人) 投稿日時 2010/8/27 23:50:56
> 第20回 配列2 コントロール配列
> http://homepage1.nifty.com/rucio/main/shokyu/jugyou20.htm 

今回の質問内容に対しては、残念ながらコントロール配列は使用できません。


10.イベントの共有
http://homepage1.nifty.com/rucio/main/technique/ShareEvent.htm

2章の最後より。
> ちなみに、コントロール配列をクラスのWithEventsステートメントで取得することはできないので注意して下さい。

#> (コントロール配列にする…というわけにもいかないですしね) 
#と魔界の仮面弁士さんが書かれているのもその辺を踏まえてのことでしょう。
投稿者 neptune  (社会人) 投稿日時 2010/8/27 22:06:40
>初心者なりに、サイトに記載してあった内容を編集していたのですが、
なら、なおさら良く読みましょう。・・・・って、どこに記載しているのかもリンク貼って下さいね。

このサイトの講座内で分かり易く解説してくれています。

第20回 配列2 コントロール配列
http://homepage1.nifty.com/rucio/main/shokyu/jugyou20.htm
投稿者 YAS  (社会人) 投稿日時 2010/8/27 20:14:13
>言語:Visual Basic 6.0

コードをよく見て,VB6だと気づくべきでした。
見当違いの投稿をし,申し訳ありません。
投稿者 Nepia  (社会人) 投稿日時 2010/8/27 13:24:18
YAS 様

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

環境を書いていませんでしたので、今更ですが記述しておきます。

OS:WindowsXP
言語:Visual Basic 6.0

元々はPictureBoxの中に描画するように作成しようと
思ったのですが、まだ駆け出しで、知識が浅いこともあり、
たちまちということで100個並べての形で作っていました。

YAS様からの記述を拝見させていただきました。
環境が違うのでそのまま使用させていただくということが出来ませんが、
今後を踏まえ参考にさせていただきます。

ありがとうございます。
投稿者 YAS  (社会人) 投稿日時 2010/8/27 12:09:43
LifeGameをつくるなら,今後PictureBoxの数を増やすことも考え,コードで配置した方がよいのでは
ないでしょうか。コードで配置するなら最初からコントロールの配列にしてしまえば取り扱いも簡単
です。
さらにクラスをPictureBoxを継承したものにすればLifeプロパティを作るだけですし,クリックイベント
なども最初からありますから後々楽になるのではないでしょうか。

下のサンプルはそれぞれのPictureBoxをクリックすると丸の色が変わるようになっています。

Public Class Form1

    Dim Multi(99) As ExPictureBox

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For x As Integer = 0 To 9
            For y As Integer = 0 To 9
                Dim i As Integer = y * 10 + x
                Multi(i) = New ExPictureBox
                Multi(i).Location = New Point(x * 20, y * 20)
                Multi(i).Life = 0
            Next
        Next
        Me.Controls.AddRange(Multi)
    End Sub

    Private Class ExPictureBox
        Inherits PictureBox

        Dim _Life As Integer

        Sub New()
            Me.Size = New Size(20, 20)
            Me.Image = New Bitmap(20, 20)
        End Sub

        Property Life As Integer
            Get
                Return Me._Life
            End Get
            Set(ByVal value As Integer)
                Me._Life = value
                Dim FillColor As Brush = Brushes.LightGreen
                If value = 1 Then
                    FillColor = Brushes.Green
                End If
                Using g As Graphics = Graphics.FromImage(Me.Image)
                    g.FillEllipse(FillColor, g.VisibleClipBounds)
                End Using
                Me.Refresh()
            End Set
        End Property

        Private Sub ExPictureBox_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
            If Me.Life = 0 Then
                Me.Life = 1
            Else
                Me.Life = 0
            End If
        End Sub

    End Class

End Class
投稿者 Nepia  (社会人) 投稿日時 2010/8/27 09:50:41
魔界の仮面弁士 様

返答ありがとうございます。
無事動作することができました。

* 念のため
今回LifeGameを作成するにあたって、
PictureBoxを100個ならべて作成してみようと考え、
今回の質問にいたりました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/8/27 01:59:01
> この時の、FormのLoad関数で①と②の部分をFor文で回したいのですが、
たとえば、
 Multi(n).Bind Controls("picBox" & CStr(n + 1)), 0
でどうでしょう。
(コントロール配列にする…というわけにもいかないですしね)
投稿者 Nepia  (社会人) 投稿日時 2010/8/26 15:06:33
いつも拝見させていただいております。
初心者なりに、サイトに記載してあった内容を編集していたのですが、

Dim Multi(1) As New clsChange

'************************************************
Private Sub Form_Load()
    Multi(0).Bind picBox1, 0    '①
    Multi(1).Bind picBox2, 0    '②
End Sub
'************************************************


clsChange.cls
'************************************************
Public WithEvents mltPict As PictureBox
Public intLife As Integer

Public Sub Bind(picBox As PictureBox, intTemp As Integer)
    Set Me.mltPict = picBox
    Me.intLife = intTemp
End Sub
'************************************************

この時の、FormのLoad関数で①と②の部分をFor文で回したいのですが、
どの用に変更すればいいですか。

ご助力をお願いいたします。