- 題名: VBでクロスワード
- 日時: 2010/02/02 21:35:57
- ID: 26369
- この記事の返信元:
- (なし)
- この記事への返信:
- [26371] Re[1]: VBでクロスワード2010/02/02 22:56:30
- ツリーを表示
■No26369に返信(JINGさんの記事)
> Private btnMoji(71) As Button 'ア〜ンのボタン
> Private btnMasu(25) As Button '5*5のマス目
> 71個と25個の配列を作っているのですが
違います。上記は btnMoji(0)〜btnMoji(71)までの72個と、
btnMasu(0)〜btnMasu(25)までの26個の宣言を意味します。
> 他に簡単な配列の記述はありますでしょうか?
デザイナでボタンを生成するのではなく、
プログラムコードで生成してみては如何でしょう。
Private Buttons As List(Of Button)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Buttons = New List(Of Button)()
Me.SuspendLayout()
For c As Integer = Asc("ア") To Asc("ン")
Dim btn As New Button()
btn.Text = Chr(c)
AddHandler btn.Click, AddressOf Buttons_Click
Buttons.Add(btn)
FlowLayoutPanel1.Controls.Add(btn)
Next
Me.ResumeLayout()
End Sub
Private Sub Buttons_Click(ByVal sender As Object, ByVal e As EventArgs)
MsgBox(DirectCast(sender, Button).Text)
End Sub
ただ、これだと 83 個のボタンになってしまうので、
「ヰ」や「ッ」などを除いた 71 個とするならば、
このような方法もあります。
Const KATAKANA As String = "アイウエオ〜略〜ワヲン"
For Each c As Char In KATAKANA
Dim btn As New Button()
btn.Text = c
AddHandler btn.Click, AddressOf Buttons_Click
Buttons.Add(btn)
FlowLayoutPanel1.Controls.Add(btn)
Next
分類:[.NET]
初めまして。JINGと申します。
Vista VB.NET 2005で http://www.gamedesign.jp/flash/kanafla/kanafla.html
こちらのようなクロスワードを作ろうと考えているのですが、
Private btnMoji(71) As Button 'ア〜ンのボタン
Private btnMasu(25) As Button '5*5のマス目
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
btnMoji(0) = btnA
btnMoji(1) = btnI
btnMoji(2) = btnU
btnMoji(3) = btnE
・
・
・
btnMoji(70) = btnN
btnMasu(0) = btn1
btnMasu(1) = btn2
btnMasu(2) = btn3
btnMasu(3) = btn4
・
・
・
btnMasu(24) = btn25
End Sub
For〜Nextで複数のボタンに一度に命令を与えようと上記のように71個と25個の配列を作っているのですが、
ブログラムとしてあまりに不恰好な気がします。他に簡単な配列の記述はありますでしょうか?
それと、マスで使用中の文字を使用不可(Enabled = False)にする記述が、対象が配列同士になるとうまく書けません。
プログラムというよりもIf文、アルゴリズムの領域の問題かと思いますが、進展がなくなって久しいので、こちらに投稿した次第です。
よろしくお願いします。