我尝试使用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();
}
}
}
请帮忙!
答案 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);