以编程方式将标签添加到面板
programmatically add label to panel
我正在尝试以编程方式向面板添加标签。当我添加具有相同 Y 轴的标签并错开 X 时,仅显示第一个标签。当我同时设置 X 和 Y 时,它们都会显示。我将 Panel1.Controls.Add(labels(i)) 移动到另一个未显示的区域。下面我评论了 intY_location 所有标签显示在同一个 Y 轴上。
Dim labels(100) As Label
For i = 0 To 100
labels(i) = New Label
Panel1.Controls.Add(labels(i))
' labels(i).Font = 1
' Label1.Font = New Font(labels(i).Font.Name, labels(i).Font.Size + 10, labels(i).Font.Style)
Next i
For i = 0 To 10
' Panel1.Controls.Add(labels(i))
intX_Location = (intX * i) '+ (intSpacer * i) + (intPixel_Width / 2) '//Offset
intY_Location = 50 '(i * intY) + (intSpacer * i) + (intPixel_Width / 2)
labels(i).Text = "i"
labels(i).Visible = True
labels(i).Location = New Point(intX_Location, intY_Location)
Next i
我做了一些更改,将标签从右到左放置,它们都根据需要显示。有人知道为什么吗?这是代码
'// Start with Row to show column numbers
For i = intColumnCount To 0 Step -1
intX_Location = (50 * i) + intPixel_Width '+ (intSpacer * i) + (intPixel_Width / 2) '//Offset
intY_Location = 10 '(i * intY) + (intSpacer * i) + (intPixel_Width / 2)
Panel1.Controls.Add(labels(i))
labels(i).Location = New Point(intX_Location, intY_Location)
Next i
由于标签将有新的位置,具体取决于用户,我还添加了代码以在每次有更新时从面板中删除标签。这将刷新标签位置和属性。我还添加了标签宽度,解决了我在覆盖时遇到的问题。
For i = 0 To 100
Panel1.Controls.Remove(labels(i))
Next i
For i = 0 To 100
labels(i) = New Label
labels(i).Width = 10
labels(i).Text = i.ToString() + 1
labels(i).Name = "labelControl" + i.ToString()
' Panel1.Controls.Add(labels(i))
Next i
这是一个完整的工作示例。
我不明白你的代码。在您的第一个循环中,您设置了 10 个标签的文本,但我们看不到您在哪里创建它们并且您注释了 Panel1.controls.add。
在第二个循环中,您创建了 100 个标签并将它们添加到您的面板,但没有设置任何文本(因此,它们将被创建为空的和不可见的)。
您需要创建标签,设置一些文本,为其指定位置和大小,如下例所示。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim PanelsText as New list(of string) from
{
"Label 1",
"Label 2",
"I am the best Label ever !",
"Am I a Label ?",
"Dumb Label",
"Definitely not a Label",
"An ordinary label",
"Bacon Topped label"
}
Dim Position as integer = 1
For each LabelText as string in PanelsText
Dim Label as New Label() with
{
.Text = labeltext,
.Location = New point(10,25 * Position),
.Height = 23,
.Width = 200
}
Panel1.controls.add(Label)
Position+=1
Next
End Sub
}
-- 水平标签 --
根据您的评论,我现在了解到您在水平标签放置方面遇到了问题。为了使其工作,您需要在放置标签的计算中包括标签宽度。否则,标签不透明。使用 100 像素宽度的标签将在该 100 像素下隐藏其他标签,即使该标签仅使用这些像素中的 10 个。
以这段代码为例。
private sub PopulateLabels()
Static InitialPaddingX As Integer = 10
Static InitialPaddingY As Integer = 15
Static LabelWidth As Integer = 150
Static LabelHeight As Integer = 23
Static LabelPaddingX = 5
Static LabelPaddingY = 5
Dim PanelsText As New List(Of String) From
{
"Label 1",
"Label 2",
"I am the best Label ever !",
"Am I a Label ?",
"Dumb Label",
"Definitely not a Label",
"An ordinary label",
"Bacon Topped label"
}
Dim Column As Integer = 0
Dim Row As Integer = 0
For Each LabelText As String In PanelsText
Dim Label As New Label()
With Label
.Text = LabelText
.Size = New Size(LabelWidth, LabelHeight)
.Left = InitialPaddingX + (Column * LabelWidth + LabelPaddingX)
.Top = InitialPaddingY + (Row & LabelHeight + LabelPaddingY)
End With
Panel1.Controls.Add(Label)
If Column = 2 Then
Column = -1
Row += 1
End If
Column += 1
Next
End sub
我正在尝试以编程方式向面板添加标签。当我添加具有相同 Y 轴的标签并错开 X 时,仅显示第一个标签。当我同时设置 X 和 Y 时,它们都会显示。我将 Panel1.Controls.Add(labels(i)) 移动到另一个未显示的区域。下面我评论了 intY_location 所有标签显示在同一个 Y 轴上。
Dim labels(100) As Label
For i = 0 To 100
labels(i) = New Label
Panel1.Controls.Add(labels(i))
' labels(i).Font = 1
' Label1.Font = New Font(labels(i).Font.Name, labels(i).Font.Size + 10, labels(i).Font.Style)
Next i
For i = 0 To 10
' Panel1.Controls.Add(labels(i))
intX_Location = (intX * i) '+ (intSpacer * i) + (intPixel_Width / 2) '//Offset
intY_Location = 50 '(i * intY) + (intSpacer * i) + (intPixel_Width / 2)
labels(i).Text = "i"
labels(i).Visible = True
labels(i).Location = New Point(intX_Location, intY_Location)
Next i
我做了一些更改,将标签从右到左放置,它们都根据需要显示。有人知道为什么吗?这是代码
'// Start with Row to show column numbers
For i = intColumnCount To 0 Step -1
intX_Location = (50 * i) + intPixel_Width '+ (intSpacer * i) + (intPixel_Width / 2) '//Offset
intY_Location = 10 '(i * intY) + (intSpacer * i) + (intPixel_Width / 2)
Panel1.Controls.Add(labels(i))
labels(i).Location = New Point(intX_Location, intY_Location)
Next i
由于标签将有新的位置,具体取决于用户,我还添加了代码以在每次有更新时从面板中删除标签。这将刷新标签位置和属性。我还添加了标签宽度,解决了我在覆盖时遇到的问题。
For i = 0 To 100
Panel1.Controls.Remove(labels(i))
Next i
For i = 0 To 100
labels(i) = New Label
labels(i).Width = 10
labels(i).Text = i.ToString() + 1
labels(i).Name = "labelControl" + i.ToString()
' Panel1.Controls.Add(labels(i))
Next i
这是一个完整的工作示例。
我不明白你的代码。在您的第一个循环中,您设置了 10 个标签的文本,但我们看不到您在哪里创建它们并且您注释了 Panel1.controls.add。
在第二个循环中,您创建了 100 个标签并将它们添加到您的面板,但没有设置任何文本(因此,它们将被创建为空的和不可见的)。
您需要创建标签,设置一些文本,为其指定位置和大小,如下例所示。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim PanelsText as New list(of string) from
{
"Label 1",
"Label 2",
"I am the best Label ever !",
"Am I a Label ?",
"Dumb Label",
"Definitely not a Label",
"An ordinary label",
"Bacon Topped label"
}
Dim Position as integer = 1
For each LabelText as string in PanelsText
Dim Label as New Label() with
{
.Text = labeltext,
.Location = New point(10,25 * Position),
.Height = 23,
.Width = 200
}
Panel1.controls.add(Label)
Position+=1
Next
End Sub
-- 水平标签 --
根据您的评论,我现在了解到您在水平标签放置方面遇到了问题。为了使其工作,您需要在放置标签的计算中包括标签宽度。否则,标签不透明。使用 100 像素宽度的标签将在该 100 像素下隐藏其他标签,即使该标签仅使用这些像素中的 10 个。
以这段代码为例。
private sub PopulateLabels()
Static InitialPaddingX As Integer = 10
Static InitialPaddingY As Integer = 15
Static LabelWidth As Integer = 150
Static LabelHeight As Integer = 23
Static LabelPaddingX = 5
Static LabelPaddingY = 5
Dim PanelsText As New List(Of String) From
{
"Label 1",
"Label 2",
"I am the best Label ever !",
"Am I a Label ?",
"Dumb Label",
"Definitely not a Label",
"An ordinary label",
"Bacon Topped label"
}
Dim Column As Integer = 0
Dim Row As Integer = 0
For Each LabelText As String In PanelsText
Dim Label As New Label()
With Label
.Text = LabelText
.Size = New Size(LabelWidth, LabelHeight)
.Left = InitialPaddingX + (Column * LabelWidth + LabelPaddingX)
.Top = InitialPaddingY + (Row & LabelHeight + LabelPaddingY)
End With
Panel1.Controls.Add(Label)
If Column = 2 Then
Column = -1
Row += 1
End If
Column += 1
Next
End sub