动态创建的PictureBox不会在C#中显示

时间:2017-02-18 17:15:06

标签: c#

我试图在运行时加载pictureBox。没有运行时错误。但是PictureBox没有显示出来。

后来我也添加了InitializeComponent(),但它没有帮助。

我的代码:

private void button1_Click(object sender, EventArgs e)
        {
            PictureBox picLoadingNew = new PictureBox();
            picLoadingNew.BackColor = System.Drawing.Color.Transparent;
            picLoadingNew.Image = global::QuiDip.Properties.Resources.ajax_loader_Long;
            picLoadingNew.Location = new System.Drawing.Point(790, 760);
            picLoadingNew.Name = "picLoadingNew";
            picLoadingNew.Size = new System.Drawing.Size(142, 22);
            picLoadingNew.Dock = DockStyle.Fill;
            //InitializeComponent();
            this.Controls.Add(picLoadingNew);
            picLoadingNew.Show();
            picLoadingNew.Visible = true;
        }

2 个答案:

答案 0 :(得分:0)

您的代码应该可以运行但是有一点问题。如果您的图像与另一个图像的位置完全相同且大小相同,则无法看到它。它位于屏幕上当前图像的后面。

删除显示和可见调用,但添加对BringToFront的调用

this.Controls.Add(picLoadingNew);
// picLoadingNew.Show();
// picLoadingNew.Visible = true;
picLoadingNew.BringToFront();

顺便说一句,如果您要求它填充其容器上的可用空间,那么为新图像指定特定尺寸的重点是什么?

答案 1 :(得分:0)

你不需要。显示或。可见行,因为这将是默认值,但你确实需要this.Controls.Add(picLoadingNew) - 只要表单将成为父而不是Panel或其他任何东西。如果PictureBox位于另一个控件(如面板)的顶部,则实际需要:panel.Controls.Add(picLoadingNew) - 而不是当前的this.Controls.Add(picLoadingNew)行。

我首先尝试的是因为我看不到您的代码有任何错误,将图片框的默认位置更改为:

picLoadingNew.Location = new System.Drawing.Point(5,5);

删除.Dock行。

这可能是将PictureBox设置为关闭屏幕(取决于表单的大小?) - 你没有提供这个,所以猜测可能出错。如果PictureBox在屏幕外,新坐标将强制它在左上角 - 所以你肯定应该看到它。一旦你知道它正在工作,你可以将它移动到位并在你证明代码实际工作后设置锚点。

您可能会发现设置.SizeMode = StretchImage可能很有用,因为您的图像太大而且再次“屏幕外”。 StretchImage将强制图像调整大小以适应您在PictureBox中使用您提供的当前.Size维度。

类似的东西:

PictureBox picLoadingNew = new PictureBox();
picLoadingNew.BackColor = System.Drawing.Color.Transparent;
picLoadingNew.Image = global::QuiDip.Properties.Resources.ajax_loader_Long;
picLoadingNew.Location = new System.Drawing.Point(5, 5);
picLoadingNew.Size = new System.Drawing.Size(142, 50);
picLoadingNew.SizeMode = PictureBoxSizeMode.StretchImage;
parent.Controls.Add(picLoadingNew);

上面的代码对我有用(当然使用我自己的图像!)。

希望有所帮助。