动态标签父级无效

时间:2014-12-06 15:29:08

标签: c# .net winforms parent

我正在创建一个聊天程序,对于聊天框,我希望有一种whatsapp风格的消息布局。我这样做(可能不是最好的)是通过动态创建一个带有我的蓝色背景图片的图片框,然后添加一个标签,使图片框成为父图片,然后将消息覆盖在图片框上。我正在使用这段代码:

private void CreateChatBox(int height, string message)
    {
        PictureBox pb = new PictureBox();
        Label pbl = new Label();
        pb.Name = height.ToString();
        pbl.Text = message;
        pbl.Name = height.ToString();
        pb.Image = LocalChat.Properties.Resources.ChatBox_Test;
        pb.SizeMode = PictureBoxSizeMode.StretchImage;

        // set picturebox possitions and margins
        pb.Left = 15;
        pb.Top = 100;
        pb.Width = 250;
        pb.Height = 75;
        tabPage.Controls.Add(pb);

        //set label positions and margins
        pbl.Parent = pb;
        pbl.AutoSize = true;
        pbl.Width = 200;
        pbl.BackColor = Color.Transparent;
        pbl.Location = new Point(1, 1);
        // Add button click event Handler and add buttons and lables to the panel

        tabPage.Controls.Add(pbl);
    }

我的问题是我正在将图片框作为标签的父级,但标签只是位于表单的最左上方而不是我想要的图片框内。我不知道父母应该做什么? 或者我如何将我的标签限制在图片框内?

1 个答案:

答案 0 :(得分:0)

您必须删除您的代码行

 tabPage.Controls.Add(pbl);

在文件的末尾 因为在您将标签的父级设置为PictureBox后,您再次将其父级设置为TabPage 当你使用anyControl.Controls.Add(otherControl)时,你将otherControl.Parent设置为anyControl

但是我会说,如果你想要那种控制设置,你应该动态创建和设置它的控件,你可以创建一个usercontrol,在usercontrol中你可以把逻辑放到消息的显示上,然后你可以通过dinamically创建userControl并将其放在任何你想要的地方