标签在 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);
TabIndex
和 BringToFront
是我无奈之下加的,没有用。顺便说一句,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();
在运行时,我根据需要向主 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);
TabIndex
和 BringToFront
是我无奈之下加的,没有用。顺便说一句,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();