tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル簡単なゲームの作成中【質問】
記事No8546
投稿日: 2009/01/09(Fri) 13:01
投稿者or2
はじめまして。
私は現在簡単なゲームの作成をしているのですが、どうしてもわからないことが出来ましてご質問させていただきます。

■はボタンだと思ってください。
フォームに下記のようにコードでボタンを配置しました。

■■■

コードは・・・

Dim SU As Integer = 0

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        While SU < 3
            Me.NewB = New Button(SU) {}
            
            SuspendLayout()
            Me.NewB(SU) = New Button
            Me.NewB(SU).Name = "Button" & SU.ToString + 1

            Me.NewB(SU).BackColor = Color.White
            Me.NewB(SU).Text = SU
            Me.NewB(SU).Width = 40
            Me.NewB(SU).Height = 40
            Me.NewB(SU).TextAlign = ContentAlignment.MiddleCenter

            Me.NewB(SU).Left = 20 + (50 * SU)
            Me.NewB(SU).Top = 20

            Me.Controls.Add(NewB(SU))
            AddHandler NewB(SU).Click, AddressOf NewB_Click
            PerformLayout()
            SU = SU + 1

        End While
End Sub

そして「AddHandler NewB(SU).Click, AddressOf NewB_Click」のコードは・・・

Private Sub NewB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim SelB As button = DirectCast(sender, Button)
(省略)
End Sub

・・・となっています。

ここからが本題です。

3つのボタンのうち真ん中のボタンを押すと両隣のボタンの色が変わるようにしたいのですが、ボタンをコードで記述したため両隣のボタンの指定のやり方がわからないのです。
(例えば「○○.Backcolor」のように○○に何を入れればよいのかわからない)

説明が苦手でわかりにくいとは思いますが、どなたか知恵をお貸しください>−<

[ツリー表示へ]
タイトルRe: 簡単なゲームの作成中【質問】
記事No8547
投稿日: 2009/01/09(Fri) 13:24
投稿者るしぇ
Me.NewB(0) と Me.NewB(2) じゃないの?

[ツリー表示へ]
タイトルRe^2: 簡単なゲームの作成中【質問】
記事No8578
投稿日: 2009/01/14(Wed) 15:43
投稿者or2
るしぇさん、ご返信のほうありがとうございます。
> Me.NewB(0) と Me.NewB(2) じゃないの?
早速コードを入力して実行してみましたが、やはりエラーが出てしまいます。
るしぇさんの意見を参考に、

SelB = DirectCast(Me.NewB(0), Button)

という風に値を変えて実行すれば、出来るかもとかも思いやってみましたが、やはり無理があったみたいでエラーがでちゃいました(>−<)

プログラミングって難しいですね(>=<)
私、才能ないのかなぁ?

[ツリー表示へ]
タイトルRe^3: 簡単なゲームの作成中【質問】
記事No8583
投稿日: 2009/01/15(Thu) 10:21
投稿者るしぇ
> という風に値を変えて実行すれば、出来るかもとかも思いやってみましたが、
> やはり無理があったみたいでエラーがでちゃいました(>−<)
そりゃまぁ、提示されたコードが不完全ですからね。
ループ処理の1行目で
Me.NewB = New Button(SU) {}
毎回からっぽにしてるから、このコードの実行後に NewB の中に残ってるのは
Button3 だけですから。

> SelB = DirectCast(Me.NewB(0), Button)
SelB = DirectCast(Me.NewB(2), Button) ならエラーでないと思います。
# [余談]NewB を Button の配列で定義しておけば型変換いらないです。

才能は関係ありません。
デバッグしてないからです。
デバッグしてください。

[ツリー表示へ]
タイトルRe^4: 簡単なゲームの作成中【質問】
記事No8584
投稿日: 2009/01/15(Thu) 16:12
投稿者or2
るしぇさん
ありがとうございます^−^
アドバイスのおかげで無事解決しました♪

Me.NewB = New Button(SU) {} の部分を ReDim Preserve NewB(SU) に直すことで
SelB = DirectCast(Me.NewB(0), Button) でエラーが起きなくなりました!!

るしぇさん本当にありがとうございます!!

[ツリー表示へ]