c#custom Panel

时间:2015-10-30 11:00:47

标签: c# winforms custom-controls

我正在尝试创建一个包含一些按钮和标签的自定义面板。问题是我无法在代码中正确设置显示顺序。我有这样的事情:

 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项目时,只有当我将自定义面板从一个地方拖到另一个地方时才能看到第二个标签。然而,当它不移动时以及我启动应用程序时,设计师都没有看到它。

我该如何解决?

3 个答案:

答案 0 :(得分:1)

好的,如果您没有隐藏代码,则以下任何一项都应该有效:

(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});

答案 1 :(得分:0)

如果要将标签的位置设置为第二个,请使用ZOrder属性,如果将一个置于另一个之下,则应选择TableLayoutPanel或FlowLayoutPanel。

答案 2 :(得分:0)

根据this question,似乎ZOrder是一个在C#中不可用的VB属性,但是父级SetChildIndex集合中有一个Controls

尝试

this.Controls.SetChildIndex(lblAutomatic, 1);
this.Controls.SetChildIndex(lbldivider1, 2);