【问题标题】:label inside usercontrol not visible用户控件内的标签不可见
【发布时间】:2017-09-17 15:06:48
【问题描述】:

.NET 4.6.1。我创建了一个 Windows 窗体用户控件。我已将其更改为继承 System.Windows.Forms.TreeView 而不是 Control。在其中,我(在设计器中)添加了一个标签,我在控件内部决定何时显示标签。该控件被放置在一个窗体中,并在运行时填充了一个树结构(这是正确完成的)。问题是标签在运行时 Visible 属性设置为 True 时不显示。

Public Class Treeview111
Inherits System.Windows.Forms.TreeView
...
Public Sub ShowLabel
Label1.Visible=True
End Sub

即使在设计器中将 Visible 属性设置为 True,标签也不会显示。我曾尝试在运行时动态添加标签,但没有运气。我也尝试将其从 Friend 更改为 Public 但没有。 BringToFront 也没有帮助。检查了它的位置,它似乎在逻辑值内 (45,72)。

想不出别的了。我错过了什么吗?我正在努力实现的目标是否可能?

【问题讨论】:

  • 最重要的代码丢失了,构造函数(Sub New)发生了什么并不明显。 InitializeComponent() 调用至关重要。虽然对于不是从 Form 或 UserControl 派生的类(您不能再使用设计器对其进行修改)来说它是没有意义的,但 Me.Controls.Add(Label1) 调用对于确保它可以被看到很重要。
  • >>最重要的代码不见了,构造函数(Sub New)发生了什么并不明显。这对我来说似乎很明显,因为省略对 InitializeComponent() 的调用会产生警告,因此不会丢失它。此外,在 VB.NET 中,“Me.Controls.Add(Label1)”是由 VS 自己自动添加到 Form.Designer.vb 文件中的。出于这两个原因,我认为没有必要投反对票。我来这里专门询问,在哪里看,因为我不明白什么可能导致问题。无论如何,您的回复为我指明了正确的方向(见回复)。
  • 好吧,给我们看看好的重现代码。现在的情况还不足以让我们猜测它为什么不起作用。它不应该工作没有根本原因。

标签: vb.net winforms user-controls inherited


【解决方案1】:

感谢 Hans Passant 的回复,我被指出了正确的方向。我通过 Visual Studio 的 UI 向 UserControl 添加了一个标签,期望它将所有必要的代码添加到源文件中,就像 VS 几乎总是做的那样。看来VS2013,当您在继承自另一个控件的用户控件中添加控件时,并非所有元素都会自动添加到源代码中。在这种情况下,VS 没有像我预期的那样在 Designer.vb 文件中自动添加以下语句:

Me.Controls.Add(Label1)

我手动添加了,问题解决了。

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多