c#winforms在运行时动态创建图片框并不起作用

时间:2017-07-26 10:50:45

标签: c#

我尝试使用c# winforms在运行时动态创建 PictureBoxes 。 我的项目:我想编写一个程序,它有一个 node-GUI (一个带有各种类型节点的GUI,某种类型的盒子,它们连接在一起并处理图像,音频流或无论)。

因此我想在运行时动态创建和删除 Pictureboxes ,但我的测试无法正常工作,表单为空。

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AudioNodeGUI
{
    public partial class AudioNodeWindow : Form
    {
        public AudioNodeWindow()
        {
            InitializeComponent();
        }

        private void AudioNodeWindow_Load(object sender, EventArgs e)
        {

        }

        private void AudioNodeWindow_Paint(object sender, PaintEventArgs e)
        {
        PictureBox start_picture = new PictureBox
            {
                Name = "pictureBox",
                Size = new Size(19, 32),
                Location = new Point(100, 100),
                Visible = true,
                Image = Bitmap.FromFile(@"C:\Users\Benjamin.MBENJAMIN\Pictures\Start.png"),
            };
            start_picture.Show();
        }
    }
}

请帮忙!

3 个答案:

答案 0 :(得分:1)

您需要将您创建的控件添加到Forms控件。

在您显示()图片框之前,请尝试添加以下行:

Controls.Add(start_picture);

其次,你不想在onPaint()上做这个!

我想说你需要将它移动到Load()方法,这样就可以在表单加载时完成,而不是每次重新绘制它时都会完成!

答案 1 :(得分:1)

变化:

start_picture.Show();

为:

this.Controls.Add(start_picture);
start_picture.Show();

Controls.Add告诉表单PictureBox此特定表单的一部分。

此外,您不希望在Paint事件处理程序中执行此操作。离开它将导致比你想象的更多的图片框...

答案 2 :(得分:0)

我已将您的代码更改为:

 PictureBox start_picture = new PictureBox
        {
            Name = "pictureBox",
            Size = new Size(19, 32),
            Location = new Point(100, 100),
            Visible = true,
            Image = Bitmap.FromFile(@"D:\test\learn.png"),
        };
        //start_picture.Show();
        Controls.Add(start_picture);