c#自定义面板
本文关键字:自定义 | 更新日期: 2023-09-27 18:19:57
我正在尝试创建一个包含一些按钮和标签的自定义面板。问题是我无法在代码中正确设置显示顺序。我有这样的东西:
public partial class Pallete1 : Panel
{
private Label lblAutomatic;
private Label lbldivider1;
public Pallete1():base()
{
InitializeComponent();
this.lblAutomatic = new Label();
this.lbldivider1 = new Label();
this.lblAutomatic.Size = new Size(182,21);
this.lblAutomatic.Location = new Point(0, 0);
this.lblAutomatic.ForeColor = Color.FromArgb(0, 0, 64);
this.lblAutomatic.TextAlign = ContentAlignment.MiddleCenter;
this.lblAutomatic.Text = "Automatycznie";
this.lblAutomatic.Font = new Font("Microsoft Sans Serif", 8);
this.lbldivider1.Size = new Size(2,22);
this.lbldivider1.Location = new Point(26, 0);
this.lbldivider1.ForeColor = SystemColors.ControlText;
this.lbldivider1.BackColor = SystemColors.ButtonHighlight;
this.lbldivider1.BorderStyle = BorderStyle.Fixed3D;
this.Size = new Size(182, 184);
this.BackColor = SystemColors.ButtonHighlight;
this.BorderStyle = BorderStyle.FixedSingle;
this.Controls.AddRange(new Control[]{this.lblAutomatic,this.lbldivider1});
}
我希望lbldivider1
位于lblAutomatic
的顶部。当我将此项添加到某些WinForm
项目中时,只有当我将自定义面板从一个位置拖动到另一个位置时,才会看到第二个标签。然而,当它不移动时,以及当我启动应用程序时,在设计器中都看不到它。
我该怎么修?
好吧,如果你没有一些隐藏代码,下面的任何一个都应该有效:
(A)
this.Controls.AddRange(new Control[]{this.lblAutomatic,this.lbldivider1});
this.lbldivider1.BringToFront();
(B)
this.Controls.AddRange(new Control[]{this.lblAutomatic,this.lbldivider1});
this.lblAutomatic.SendToBack();
(C) 添加时只需交换(确保lbldivider1
按z顺序排列在第一位)
this.Controls.AddRange(new Control[]{this.lbldivider1, this.lblAutomatic});
如果要将标签的位置设置在第二个标签之上,请使用ZOrder属性,如果要将一个标签放在另一个标签之下,则可以选择TableLayoutPanel或FlowLayoutPanel。
根据这个问题,ZOrder似乎是C#中不可用的VB属性,但父级的Controls
集合上有一个SetChildIndex
。
尝试
this.Controls.SetChildIndex(lblAutomatic, 1);
this.Controls.SetChildIndex(lbldivider1, 2);