1

こんにちは。動的に作成されたパネルのレンダリングに問題がありました。最初はすべてのパネルが 100px で、そのレンダリング (y + = 100) でしたが、現在は生産が少し変更されており、これらのパネルは異なるサイズにすることができ、パネル間の距離も異なります。実際には変更されていません 100rh ...

どういうわけか互いに等距離 (10px) で描画されるようにする方法を教えてください。どうにかしてメソッド SetBounds を作成できるが、理解していないことを読んでください。

http://pastebin.com/TnSuFTti

for (int i = data_list.Count - 1; i >= 0; i--)
{
    Panel panel = new Panel(); //создание блока сообщения и наложение картинки
    panel.Name = i.ToString();
    panel.MouseEnter += new EventHandler(panel_MouseEnter);
    Label textBox_name = new Label();
    Label textBox_date = new Label();
    Label textBox_msg = new Label();
    panel.Width = 308;
    Bitmap btm_msg = new Bitmap(
                Properties.Resources.NotificationCenterWindow_msg_box);
    panel.BackgroundImage = btm_msg;
    panel.BackgroundImageLayout = ImageLayout.Stretch;
    panel.Location = new Point(5, 5);

    panel.Controls.Add(textBox_date); 
    textBox_date.Name = "textBox_date" + i.ToString();
    textBox_date.Location = new Point(232, 8);
    textBox_date.Size = new System.Drawing.Size(70, 15);
    textBox_date.BorderStyle = BorderStyle.None;
    textBox_date.MinimumSize = new System.Drawing.Size(72, 15);
    textBox_date.TextAlign = ContentAlignment.MiddleRight;
    textBox_date.BackColor = Color.DarkGray;
    textBox_date.Anchor = AnchorStyles.Right | AnchorStyles.Top;
    textBox_date.ForeColor = SystemColors.ScrollBar;

    panel.Controls.Add(textBox_name); 
    textBox_name.Size = new System.Drawing.Size(100, 15);
    textBox_name.MinimumSize = new System.Drawing.Size(100, 15);
    textBox_name.Location = new Point(5, 8);
    textBox_name.BorderStyle = BorderStyle.None;
    textBox_name.BackColor = Color.DarkGray;
    textBox_name.ForeColor = SystemColors.ScrollBar;
    panel.Height = textBox_name.Height + 19;
    panel1.Controls.Add(panel);
    panel.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;

    y += 100;
}
4

2 に答える 2

0

前のパネルに基づいて位置を設定するだけです...

// This will put the panel to the right of an existing one
panel_b.Left = panel_a.Left + panel_a.Width + 10;

.

// This will put the panel below an existing one
panel_b.Top= panel_a.Top+ panel_a.Height+ 10;
于 2013-09-06T07:30:56.873 に答える
0
panel.Location = new Point(5, y);
//.....
y = panel.Bottom + 10;
于 2013-09-06T07:32:05.180 に答える