2017-04-22 114 views
-1

VB.netを習得しようとしていますが、問題が発生しました。私はパネル/テキストボックス/グループボックスにラベルを動的に追加しようとしています。ダイナミックラベルを作成する際には、の位置というプロパティを指定する必要があります。私はこれに少し驚きました。新しいラベルを作成する場所を正確に管理する必要があるのはなぜですか?なぜこれを自動的に処理するレイアウトマネージャーはありませんか?とにかく、これをやる方法を見つけることができませんでしたが、ラベルを動的に追加するためのテキストボックスの使用を主張する例が見つかりました。しかし、私は、テキストボックスに何が表示されても、1つのラベルが表示されているのを見ているだけです。 (私はデバッグするとき、私はより多くのラベルがコントロールに追加されたことをオブジェクトに気づいたが、表示はそれに応じて反映していなかった)vb.netで場所を指定せずにラベルを動的に追加する

ここでここで私は

を使用していたコードがあります、それは

only one label!

次のようになります。

Private Sub AddTagCombo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles addTagCombo.SelectedIndexChanged 
     Dim selectedTag = addTagCombo.Text 
     If Not IsDuplicateTag(selectedTag) Then 
      Dim label As Label = New Label 
      label.Text = selectedTag 
      label.Name = selectedTag 
      label.AutoSize = True 
      label.Top = 10 
      label.Left = 10 
      tagsBox.Controls.Add(label) 
     End If 
    End Sub 

ダイナミックラベルを追加するには、別のコンテナ内に配置する場所を気にせずにどうすればよいですか?

+2

ツールボックスからフォーム上のラベルを削除するためにマウスを使用しなくなりました。だからあなたはもはやデザイナーにあなたのためにLocationプロパティを設定させることはなく、あなた自身がそれをやる必要があります。今はお互いの上にそれらを置いているので、最後に追加したものしか見ることができません。 FlowLayoutPanelは、それらを自動的に配置するのに便利です。またはComboBox、DomainUpDown、ListBox、ListView、TreeView、DataGridViewなどの複数の文字列を表示できる他のコントロール。それらをすべて試してみてください。 –

+0

私はflowlayoutpanelについてちょっと混乱しています。私のコードに間違いがありますか?なぜそれは複数のコントロールを表示しませんか? – Jay

+0

私はあなたが理解できないことを理解するのに非常に苦労しています。お互いの上にラベルを積み重ねると、あなたは何を期待しましたか?あなたは書籍の束の一番下にある本の前に印刷されたタイトルをどうやって読んでいますか? –

答えて

2

コードは正常に表示され、ラベルが正常に生成されます。しかし、あなたの新しいラベルは、その位置が同じであるため、お互いの上に置きます。

すべて新しいラベルの場所をそれぞれ変更する必要があります。たとえば、新しいラベルごとにlebel.Topを増やします。ここ

提案どのように全

'Add a variable to increment top location 
Dim TopFactor As Integer = 1 

Private Sub AddTagCombo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles addTagCombo.SelectedIndexChanged 
    Dim selectedTag = addTagCombo.Text 
    If Not IsDuplicateTag(selectedTag) Then 
     Dim label As Label = New Label 
     label.Text = selectedTag 
     label.Name = selectedTag 
     label.AutoSize = True 
     label.Top = 10 * TopFactor 
     label.Left = 10 
     tagsBox.Controls.Add(label) 

'Increment TopFactor 
    TopFactor +=1 
    End If 
End Sub 

次に、最初のラベルは、(10,10)の位置になり、第二の位置(20、10)になり..等。

これはあなたの発行を解決します。

+0

しかし、私はそれらを横に並べて、行がいっぱいになると、次の行にそれらを入れたいと思っています。 – Jay

+1

@Jay:[** FlowLayoutPanel' **](https://msdn.microsoft .com/en-us/library/system.windows.forms.flowlayoutpanel(v = vs.110).aspx)、既に提案されているように! - また、FYI、_rows_は上から下へ(答えのコードのように)、_ **列** _は左から右に移動します。 –

+0

ありがとうございました、フローレイアウトパネルはトリックでした。 – Jay

関連する問題