标签在 ToolStrip 上方不可见

Label not visible above ToolStrip

在运行时,我根据需要向主 window 添加(和删除)几个控件,在 Designer 中它只包含一个带有一些功能按钮的 ToolStrip。在某些情况下,我想在 toolStrip 旁边添加一个信息标签,但我无法使其可见,即。它隐藏在下面。标签的代码很简单

infoLabel = new Label();
infoLabel.AutoSize = true;
infoLabel.Location = new System.Drawing.Point(200, 10);
infoLabel.Size = new System.Drawing.Size(35, 13);
infoLabel.BackColor = System.Drawing.SystemColors.Control;
infoLabel.Font = new System.Drawing.Font("Arial", 13);
infoLabel.ForeColor = System.Drawing.Color.Black;
infoLabel.TabIndex = 1;
infoLabel.Text = "this is info";
infoLabel.BringToFront();
this.Controls.Add(infoLabel);

TabIndexBringToFront 是我无奈之下加的,没有用。顺便说一句,ToolStrip的TabIndex是2,它的BackColor我改成了透明的。

但是,当我在设计器中的 ToolStrip 上放置一个标签时,它是可见的(即在顶部)。然后我分析了代码,但没有发现与我正在写的有什么不同。我在这里错过了什么?

Windows 表单控件没有 属性,您可以使用它来设置控件的 z-index,就像在 CSS.

中所做的那样

您需要致电 Parent.SetChildIndex(control, 0);Controls 集合前面的控件是容器控件的 z 顺序中的最顶层。

我建议在最后调用 infoLabel.BringToFront();,至少 this.Controls.Add(infoLabel) 之后;您当前的代码已修改:

infoLabel = new Label();
...
infoLabel.Text = "this is info";

// First Add to this
this.Controls.Add(infoLabel);

// Only then we can make infoLabel be the topmost 
// among all existing controls which are on this
infoLabel.BringToFront();

我们创建 infoLabel,将其添加到 this,最后使其成为 this 上的 topmost。为了使代码更 可读性 我建议这样:

// Create a label on this
infoLabel = new Label() {
  AutoSize  = true,
  Location  = new System.Drawing.Point(200, 10),
  Size      = new System.Drawing.Size(35, 13),
  BackColor = System.Drawing.SystemColors.Control,
  Font      = new System.Drawing.Font("Arial", 13),
  ForeColor = System.Drawing.Color.Black,
  TabIndex  = 1,
  Text      = "this is info",
  Parent    = this // <- instead of this.Controls.Add(infoLabel);
};

// make infoLabel topmost among all controls on this
infoLabel.BringToFront();