管理.net中的标签

时间:2012-01-18 19:09:12

标签: .net winforms labels

我正在使用VB 2008 express,但这可能适用于所有.net环境。

我的问题与什么都不做的标签有关。没有事件,他们的文字永远不会改变。他们只是坐在文本框和其他小玩意上方,以便用户知道每个doohickey的用途。这是他们的全部工作。简单。没有任何代码。 (除了表单设计者编写的代码。)

我的问题是,他们中有很多人!我的应用程序在同一表单上有多个选项卡,每个选项卡都有很多对象,每个选项卡都有一个关联的标签。由于我从不打扰他们的名字,我现在有一个名为Label224的标签。那是对的,224个标签!这太荒谬了。当我查看属性窗口时,有时我希望使用下拉列表按名称选择一个对象,它们会强制进行大量滚动。

问题:有没有办法在开发过程中使未命名标签(或代码中未引用的任何类型的对象)的数量不那么突兀?

我当然可以在代码中加载它们。这样会很好,但是如果没有运行代码的反复试验来判断定位是否正确,那么将它们以图形方式布局是很好的。

2 个答案:

答案 0 :(得分:4)

有几件事。

将每个标签的GenerateMember属性设置为false:

label1.GenerateMember = False

这将阻止Label出现在代码视图组合框和智能感知中。

除此之外,你只有太多的控件。

您提到了“标签”,在这种情况下,您可以尝试将每个标签移动到单独的用户控件中,然后您只为每个标签加载单个用户控件。它不会减少控件的数量,但会使其更易于管理。

标签的另一个“作业”是为标签顺序中的下一个控件提供助记符控制激活。如果你没有使用它,你可以尝试“作弊”并一起摆脱标签,并在容器的绘画事件中“绘制”每个控件旁边的标签。您可以将标签的显示放在控件的标记属性中,然后在其上绘制。不一定是最好的建议。

示例:

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
  For Each c As Control In Me.Controls
    If c.Tag IsNot Nothing Then
      TextRenderer.DrawText(e.Graphics, c.Tag.ToString, Me.Font, _
                            New Rectangle(c.Left - 100, c.Top, 100, c.Height), _
                            Color.Black, Color.Empty, TextFormatFlags.VerticalCenter)
    End If
  Next
End Sub

答案 1 :(得分:3)

如果你有很多带有相邻标签的TextBox控件,你可以创建一个由TextBox和Label组成的usercontrol。您可以添加自己喜欢的任何属性来自定义外观。

enter image description here

这是一种常见的UI模式,我真的认为VS应该带有这样的控件。

这也意味着您可以更快地创建新表单,因为您只需要为每个编辑字段添加一个控件,而不是两个。

这是我拥有的另一个用户控件示例 - 这只是两个标签,但原理是相同的:

enter image description here

在这里,它在一种形式上被多次使用:

enter image description here

而不是表单上的18个标签,我有9个usercontrol实例。