【问题标题】:Why are dynamically created labels not showing correctly?为什么动态创建的标签不能正确显示?
【发布时间】:2015-05-10 07:19:07
【问题描述】:

好的,由于某种原因,这行不通,但我以前做过。

我正在创建一个hangman 应用程序,但我的动态标签根本不会显示。

我写了这段代码:

Dim xLabel As Integer = lblPosition.Location.X
Dim yLabel As Integer = lblPosition.Location.Y
For i As Integer = 0 To film.Length - 1
    Dim label1 As New Label
    xLabel += 20
    label1.Location = New Point(xLabel, yLabel)
    label1.Text = "_"
    label1.Font = New Drawing.Font("Century Gothic", _
                  16, _
                  FontStyle.Bold)
    label1.ForeColor() = Color.White
    label1.Name = "lblLetter" & i
    Me.Controls.Add(label1)
Next

因此,为film 字符串中的每个字符创建了一个标签,并带有下划线作为文本。 lblPosition 是我作为其他标签位置基础的标签。

标签不显示。我可以把下划线改长一些,它只会显示最后一个字符。

我的表单确实足够宽,我还没有名为label1 的标签。 它也可以编译。

编辑:如果我添加边框,这就是标签的样子,但仍然没有文本。

编辑2:字体大小与第一个下划线相同,如果我使用字母,我得到这个(字体大小也减小了)

【问题讨论】:

  • 他们可能正在被添加。字体很大,所以尺寸可能不够高,它们很可能重叠,导致只显示最后一个字符。将borderstyle设置为3D,看看还有什么问题。
  • 谢谢,请检查我的编辑
  • 字体很大,所以可能不够高 - 下划线 (_) 将位于底部,可能在边界之外。设置一个足够大的特定尺寸以显示...只需在其中放一个或 2 个字母,您就会看到它们是如何被剪裁的。

标签: vb.net winforms


【解决方案1】:

label1.AutoSize = True 添加到您的循环中:

Dim xLabel As Integer = lblPosition.Location.X
Dim yLabel As Integer = lblPosition.Location.Y
For i As Integer = 0 To film.Length - 1
    Dim label1 As New Label
    xLabel += 25 ' <---- 25 works better with your font size
    label1.Location = New Point(xLabel, yLabel)
    label1.AutoSize = True ' <---- HERE!
    label1.Text = "_"
    label1.BorderStyle = BorderStyle.FixedSingle ' <---- Added border for demo
    label1.Font = New Drawing.Font("Century Gothic", _
                  16, _
                  FontStyle.Bold)
    label1.ForeColor() = Color.White
    label1.Name = "lblLetter" & i
    Me.Controls.Add(label1)
Next

没有AutoSize

AutoSize:

【讨论】:

  • 或者如果您不想自动调整大小但要固定大小,您可以设置label1.Size
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多