複数Controlの制御に関して への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 neptune  (社会人)
投稿日時
2010/8/28 11:15:00
よねKEN さん ご指摘ありがとうございます。
Nepiaさんの最初のソースを・・・・良く見てなかった m(_ _)m
何故かしらclass側の
as picturebox
の宣言が頭にこびりついていたようです。
Nepiaさん>
という事で、
投稿者 neptune (社会人) 投稿日時 2010/8/27 22:06:40
についてはピント外れという事で無視して下さい。
#Class側でpictureboxを動的に作成しても良いんですが、位置計算も必要なり鬱陶しいので
#やっぱり魔界の仮面弁士さんの方法が一番簡単かと思います。
#この辺りも、魔界の仮面弁士さんは考慮されているかと想像してます。
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ステートメントで取得することはできないので注意して下さい。
#> (コントロール配列にする…というわけにもいかないですしね)
#と魔界の仮面弁士さんが書かれているのもその辺を踏まえてのことでしょう。
> 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
なら、なおさら良く読みましょう。・・・・って、どこに記載しているのかもリンク貼って下さいね。
このサイトの講座内で分かり易く解説してくれています。
第20回 配列2 コントロール配列
http://homepage1.nifty.com/rucio/main/shokyu/jugyou20.htm
投稿者 YAS  (社会人)
投稿日時
2010/8/27 20:14:13
>言語:Visual Basic 6.0
コードをよく見て,VB6だと気づくべきでした。
見当違いの投稿をし,申し訳ありません。
コードをよく見て,VB6だと気づくべきでした。
見当違いの投稿をし,申し訳ありません。
投稿者 Nepia  (社会人)
投稿日時
2010/8/27 13:24:18
YAS 様
返答ありがとうございます。
環境を書いていませんでしたので、今更ですが記述しておきます。
OS:WindowsXP
言語:Visual Basic 6.0
元々はPictureBoxの中に描画するように作成しようと
思ったのですが、まだ駆け出しで、知識が浅いこともあり、
たちまちということで100個並べての形で作っていました。
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
ないでしょうか。コードで配置するなら最初からコントロールの配列にしてしまえば取り扱いも簡単
です。
さらにクラスを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個ならべて作成してみようと考え、
今回の質問にいたりました。
返答ありがとうございます。
無事動作することができました。
* 念のため
今回LifeGameを作成するにあたって、
PictureBoxを100個ならべて作成してみようと考え、
今回の質問にいたりました。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/8/27 01:59:01
> この時の、FormのLoad関数で①と②の部分をFor文で回したいのですが、
たとえば、
Multi(n).Bind Controls("picBox" & CStr(n + 1)), 0
でどうでしょう。
(コントロール配列にする…というわけにもいかないですしね)
たとえば、
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文で回したいのですが、
どの用に変更すればいいですか。
ご助力をお願いいたします。
初心者なりに、サイトに記載してあった内容を編集していたのですが、
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文で回したいのですが、
どの用に変更すればいいですか。
ご助力をお願いいたします。
YAS 様
>コードをよく見て,VB6だと気づくべきでした。
私が記述すべきことが足りませんでした。
申し訳有りませんでした。
neptune 様
>どこに記載しているのかもリンク貼って下さいね。
大変申し訳有りませんでした。
次回質問させていただく際には参考にしたURLを
記述するようにいたします。
よねKEN 様
>http://homepage1.nifty.com/rucio/main/technique/ShareEvent.htm
参考URLありがとうございます。
このページの観覧をしておりませんでした。
中級講座でとまっておりました。
申し訳有りませんでした。
皆様の意見を参考に作成することが出来ました。
ありがとうございました。
*現在は、PictureBoxでの作成を行っております。
PictureBox自体に表示すると、ドットの関係により
描画が小さくなってしまいました・・・
拡大、縮小の勉強をし、どうしても行き詰ってしまった際には、
申し訳有りませんが、またご助力お願いいたします。