- 締切済み
VB 2005でのクロスワード作成
http://www.gamedesign.jp/flash/kanafla/kanafla.html ↑こちらを参考に、VB2005でクロスワードを作成しているのですが、使用済みの文字を不使用にする方法がよく分かりません。 今のところ、 Private btnLeft(x) As Button Private btnRight(x) As Button Private box(x) As Integer btnLeft(0) = btn1 ~ btnLeft(x) = btnx btnRight(0) = btn_1 ~ btnRight(x) = btn_x box(0) = 0 ~ box(x) = 0 Private Sub btnRight(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_1.Click, btn_2.Click,...btn_x.Click Dim i, j As Integer For i = 0 To x For j = 0 To x If btnLeft(i).FlatStyle = FlatStyle.Flat Then 'ボタンのスタイルで左を選択しているか判断 btnLeft(i).Text = sender.text End If If btnLeft(i).Text = btnRight(j).Text Then box(j) = 1 Else box(j) = 0 End If If box(j) = 1 Then btnRight(j).Enabled = False Else btnRight(j).Enabled = True End If Next Next boxを代替(?)にして、使用済みか判断させようと思ったのですが、なぜか最後のボタンにしか判定が効かなくて…… 随分初歩的なアルゴの問題でなさけないですが、どなたかお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
If btnLeft(i).Text = btnRight(j).Text Then box(j) = 1 Else box(j) = 0 ←ここ End If でせっかく立てたフラグを元に戻しているからでは? ついでですが > Dim i, j As Integer iとjをIntegerで宣言したいのであれば、この書き方は間違いです。 Dim i As Integer, j As Ineteger と個別に指定してください。 > btnLeft(i).Text = sender.text ここも遅延バインディングが使われていて非推奨です。(senderはObjectであるためtextプロパティがありません) btnLeft(i).Text = CType(sender, Button).Text と型キャスト(型変換)したほうがよいです。