2016-11-09 7 views
0

私が達成しようとしているのは、配列に書かれた文字を書かれた各行の上にセンタリングすることですが、私は現在できませんそれを進める方法は不明です。私は文字を一行に集中させようとしています

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    Dim understrekk(9), bokstav(9), utskrift, bokstUtskrift As String, i As Integer 

    utskrift = "" 
    bokstUtskrift = "" 
    bokstav(0) = "a" : bokstav(1) = "b" : bokstav(2) = "c" : bokstav(3) = "d" 
    bokstav(4) = "e" : bokstav(5) = "f" : bokstav(6) = "g" : bokstav(7) = "h" 
    bokstav(8) = "i" : bokstav(9) = "j" 

    'Handles the lines 
    For Each b In bokstav 
     utskrift = utskrift & " ___" 
    Next 

    'Handles the letters 
    For i = 0 To 9 
     bokstUtskrift = bokstUtskrift & " " & bokstav(i) 
    Next 

    Label1.Text = utskrift 
    Label2.Text = bokstUtskrift 
End Sub 

これはまた、目的は、ユーザーが単語であるどのように多くの文字を知っているので、ラインを表示することです絞首刑執行人のゲームで使用されることを想定しています。単語自体は、行の上に来る必要があります(そして、各行を中心にして、行は "___"です)。同時に、ユーザには知られていないので、隠されていなければなりません。ユーザーが正しい1文字を推測すると、その特定の文字が表示されるはずです。代わりに

'Handles the letters 
For i = 0 To 9 
    bokstUtskrift = bokstUtskrift & " " & bokstav(i) 
Next 

This is how the user interface currently looks...

+0

あなたが唯一の2つのラベル、文字用とラインのための1つを持っていますか?私は、推測する各文字と各下線に1つのラベル(またはテキストボックス)を作成することをお勧めします。これにより、1つの文字/下線位置を扱うことがずっと簡単になります。 lables.dynamicallyの数を作成することもできます。 @AlexB。 –

+0

。それは私の心を越えて試してみましたが、私は実際にそれをどうやって行うのかはかなり確信しています。 VBで最も経験豊富な人ではありません。 – ForfA

+0

少し時間があったら答を書く –

答えて

2

[OK]をlet'sは、いくつかの部分に問題を分割します。
- すべての関数/サブ/変数はクラスForm1にあります。
- プレースホルダーの場合は、_FontStyle.Underlineオプションで選択しました。これは常に正しい場所に下線が引かれます。ブランクもこの場合はプレースホルダとして機能するはずです。

ハングマン語の文字を決定します。
結果をクラス変数に格納すると、後で下線のプレースホルダを設定したり、正しい文字を表示したりするときに使用できます。

private _solution as Char() 

Private Sub setSolution(word As String) 
    'Get chars from word and put into class variable 
    _solution = word.ToArray() 
End Sub 

表形式のパネルレイアウトを作成します。

Private Sub createLayout(word As String) 
     setSolution(word) 

     'Create a panel layout with columns to get a proper distribution of chars 
     Dim table As New TableLayoutPanel() 
     table.Name = "tblHangmanWord" 
     table.ColumnCount = _solution.Length 
     table.RowCount = 1 
     table.AutoSize = True 
     table.ColumnStyles.Add(New ColumnStyle(SizeType.AutoSize)) 
     'Adjust the bounds to your needs 
     table.SetBounds(40, 150, 400, 25) 
     table.CellBorderStyle = TableLayoutPanelCellBorderStyle.None 

     'Create labels which display placeholder first, add them to the panel. The array index of _solution correspond to the table columns index. 
     For i As Integer = 0 To _solution.Length - 1 
      Dim label As New Label() 
      label.Name = "lblWord" & i.ToString 
      label.Text = "___" 'Placeholder 
      label.AutoSize = True 
      label.Font = New Font(DefaultFont, FontStyle.Underline) 
      'Add label to pabel 
      table.Controls.Add(label) 
     Next 

     'Add panel to form 
     Me.Controls.Add(table) 
End Sub 

がchar]ボタンをクリックuser'sハンドル:各列は1つの文字が含まれています。
解決策の中のどの文字がボタンと一致するかチェックし、正しい文字を表示します。

Private Sub btnM_Click(sender As Object, e As EventArgs) Handles btnM.Click 
    'Get the indexes of the matches of the current button char 
    Dim idxOfMatches = getIndexOfMatches(DirectCast(sender, Button).Text.First()) 
    'Show the correct chars in the grid 
    revealMatchingChars(idxOfMatches) 
End Sub 

Private Function getIndexOfMatches(selected As Char) As Integer() 
    Dim idxOfMatches As New List(Of Integer) 

    For i As Integer = 0 To _solution.Length - 1 
     If selected = _solution(i) Then 
      idxOfMatches.Add(i) 
     End If 
    Next 
    Return idxOfMatches.ToArray() 
End Function 

Private Sub revealMatchingChars(idxOfMatches As Integer()) 
    'Get the table panel layout 
    Dim tbl = Me.Controls.OfType(Of TableLayoutPanel).Where(Function(t) t.Name = "tblHangmanWord").First() 
    'reveal correct chars 
    For Each idx As Integer In idxOfMatches 
     tbl.Controls(idx).Text = _solution(idx) 
    Next 
End Sub 

すべて一緒に置くと、テストレイアウトを作成します。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    createLayout("Millencolin") 
End Sub 

User clicked M

0

はこれを試してみてください:

bokstUtskrift = "  " & String.Join("  ", bokstav) 
+0

今も同様にそれを解決していないとしても、同じ問題が残っています。 – ForfA

+0

@ForfA私はちょうどギャップを4と5から5と7スペースに増やしました。それは私のために適切に整列しているようです –

関連する問題