【问题标题】:Issues with adding color to dynamically created pictureboxes in c#在 C# 中为动态创建的图片框添加颜色的问题
【发布时间】:2015-12-19 06:20:19
【问题描述】:

我正在尝试为面板中动态创建的图片框添加一些生命和色彩。

我写了这段代码:

Panel panel_main = new Panel();
this.Controls.Add(panel_main);
panel_main.Size = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
panel_main.BackColor = Color.Black;

PictureBox[] logos = new PictureBox[6];

for (int i  = 0; i < 6; i++)
{
    this.Controls.Add(logos[i]);
    logos[i] = new PictureBox();
    logos[i].BackColor = Color.Yellow;
    logos[i].Location = new Point(i * 10, i * 10);
    logos[i].Size = new Size(i * 40, i * 10);
    logos[i].Visible = true;
}

图片框显示在屏幕上,但大小和颜色均不正确!

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    这里有一些问题。

    首先,你没有在这一行添加任何内容

    this.Controls.Add(logos[i]);
    

    将此行移到循环的底部。

    其次,你的第一个盒子的大小为零,这实际上可能不是问题,但你知道。

    第三是添加控件的方式。

    this.Controls.Add(logos[i]);
    

    这会将图片框放在表单上。我的直觉表明您实际上想要使用

    panel_main.Controls.Add(logos[i]);
    

    将其添加到面板而不是表单。如果你确实想使用窗体,在你添加控件后调用BringToFront方法在图片框上。

    logos[i].BringToFront();
    

    【讨论】:

    • 主要问题是在创建之前将图片框声明为面板
    【解决方案2】:
    // this.Controls.Add(logos[i]); // logos[i] is null yet
    logos[i] = new PictureBox();
    logos[i].BackColor = Color.Yellow;
    logos[i].BorderStyle = BorderStyle.FixedSingle;
    // 1. add pictureBoxes into panel
    // 2. add pictureBoxes after you created them, not before
    panel_main.Controls.Add(logos[i]);
    

    【讨论】:

    • @ZygmuntKołodziejczyk,@nikolifish 在他的回答中指出logos[0] 的大小为零。你可能也想修复它:)
    猜你喜欢
    • 2013-06-17
    • 2010-12-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多