我正在创建一个聊天程序,对于聊天框,我希望有一种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);
}
我的问题是我正在将图片框作为标签的父级,但标签只是位于表单的最左上方而不是我想要的图片框内。我不知道父母应该做什么? 或者我如何将我的标签限制在图片框内?
答案 0 :(得分:0)
您必须删除您的代码行
tabPage.Controls.Add(pbl);
在文件的末尾 因为在您将标签的父级设置为PictureBox后,您再次将其父级设置为TabPage 当你使用anyControl.Controls.Add(otherControl)时,你将otherControl.Parent设置为anyControl
但是我会说,如果你想要那种控制设置,你应该动态创建和设置它的控件,你可以创建一个usercontrol,在usercontrol中你可以把逻辑放到消息的显示上,然后你可以通过dinamically创建userControl并将其放在任何你想要的地方