私はハングマンアプリケーションを作成しようとしていますが、何らかの理由で私は単語を得ることができません。正しく表示するには「推測」する必要があります。ループの中でわかるように、すべての反復で新しいラベルが作成されます。ラベルのtextプロパティはwordLetterとして定義されたwordStringの文字として設定されます。新しいラベルのすべてのプロパティが設定されると、それがフォームに追加され、ポイントはラベルの下に線を描くように定義され、xAxis(前のラベルの右に次のラベルを配置するために使用されます)とiが繰り返されます。問題は、最初のラベルのみが表示されるか、wordString "PROGRAM"の "P"です。ループを繰り返すたびに、同じ名前の新しいラベル「wordLabel」が作成され、新しいラベルが作成されないためです。私はこれを回避する方法がわかりません。配列を使用したとしても、すべての繰り返しで新しいラベルを作成する必要があります。ループの繰り返しごとに新しいラベルを追加する
Dim point1, point2 As Point
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim i As Integer
Dim wordString As String = "PROGRAM"
Dim wordLetter As String
Dim xAxis As Integer
Do While i < wordString.Length
Dim wordLabel As New Label
wordLetter = wordString.Chars(i)
wordLabel.Font = New Font("Comic Sans MS", 25)
wordLabel.AutoSize = True
wordLabel.Text = wordLetter
wordLabel.BackColor = Color.Transparent
wordLabel.Location = New System.Drawing.Point(xAxis + 7, 190)
Me.Controls.Add(wordLabel)
point1.X = Convert.ToInt32(wordLabel.Location.X) - 10
point1.Y = Convert.ToInt32(wordLabel.Location.Y) + 40
point2.X = Convert.ToInt32(wordLabel.Size.Width) - 13
point2.Y = Convert.ToInt32(wordLabel.Location.Y) + 40
xAxis += 3
i += 1
Loop
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
e.Graphics.DrawLine(Pens.Black, point1, point2)
End Sub
「wordLabel」は、コントロール名ではなく、変数名です。複製しても問題は発生しませんが、コントロールへの参照が失われているため、後で問題が発生する可能性があります。私はあなたの問題は、各ラベルの間に3ピクセルのスペースしか入れていない可能性があると思います。彼らはおそらくお互いの上に描いています。 –
1つのラベルに文字を追加する代わりに、複数のラベルを使用する理由はありますか? –
@AhmedAbdelhameed私は、Comic Sansがモノスペースではないということで、各レターの下線の位置をより良くすることができると考えています。 –