gpt4 book ai didi

c# - 如何通过单击按钮动态生成图片框?

转载 作者:太空狗 更新时间:2023-10-29 22:37:49 30 4
gpt4 key购买 nike

我正在尝试将图片框动态添加到 C# win32 窗体,以用于我正在尝试构建的接近生产质量的应用程序,而且我已经很顺利了。

我遇到的问题是我似乎无法在一种方法中动态地向表单添加图片框或控件。我已经通过 Form1 初始化方法将它们添加到表单中,但是如果我在 button_click 方法中添加控件,它根本不会添加它们,除非我有一个面板容器,然后键入 panel1.Controls.Add(stuff) .但是,然后图片框出现在与预期完全不同的位置 - 并且显然被面板本身挡住了。大部分图片框被面板挡住了,其中一部分在面板之外。我不知道发生了什么。

这是我使用的代码,是我在网上学到的以按钮单击方法添加图片框的代码:

PictureBox pb = new PictureBox();
pb.Size = new Size(this.Size.Width / 14, this.Size.Width / 12); //I use this picturebox simply to debug and see if I can create a single picturebox, and that way I can tell if something goes wrong with my array of pictureboxes. Thus far however, neither are working.
pb.BackgroundImage = Properties.Resources.cardback;
pb.BackgroundImageLayout = ImageLayout.Stretch;
pb.Location = new Point(50, 50);
pb.Anchor = AnchorStyles.Left;
pb.Visible = true;
InitializeComponent();
this.Controls.Add(pb);
PictureBox[] pbName = new PictureBox[totaldeckcount];
for (int i = 0; i < totaldeckcount; i++)
{
pbName[i] = new PictureBox();
pbName[i].Size = new Size(this.Size.Width / 14, this.Size.Width / 12);
pbName[i].BackgroundImage = Properties.Resources.cardback;
pbName[i].BackgroundImageLayout = ImageLayout.Stretch;
pbName[i].Image = Properties.Resources.cardback;
pbName[i].Anchor = AnchorStyles.Left;
pbName[i].Visible = true;
int x = 0;
int y = 15;
if (i > 10)
{
y += (int)((this.Size.Height * i) + 30);
}
x = (int)((this.Size.Width / 12) * Math.IEEERemainder(i, 10));
pbName[i].Location = new Point(x, y);
this.Controls.Add(pbName[i]);
}

Cardback 是一种工作纹理,当我尝试在 Form1 的方法中使用它制作图片框时,我已经看到它弹出,所以这不是问题。问题似乎不是我的语法,因为我能够复制

PictureBox pb = new PictureBox();

直接在 Form1 方法中编写代码,它执行得很好。

我无法通过谷歌在网上找到任何东西,这让我完全难住了。

最佳答案

这段代码可以帮助您理解:这是我在 flowlayoutpanel 中动态创建图片框、文本框和按钮的方法。

   PictureBox[] pics = new PictureBox[50];
TextBox[] txts = new TextBox[50];
Button[] butns = new Button[50];
FlowLayoutPanel[] flws = new FlowLayoutPanel[50]
static int brh =0;


for (int i = 0; i < totalnumbers; i++)
{
flws[i] = new FlowLayoutPanel();
flws[i].Name = "flw" + i;
flws[i].Location = new Point(3,brh);
flws[i].Size = new Size(317,122);
flws[i].BackColor = Color.DarkCyan;
flws[i].BorderStyle = BorderStyle.Fixed3D;
flws[i].Disposed += Form1_Disposed;
flws[i].Click += new EventHandler(butns_Click);

pics[i] = new PictureBox();
pics[i].Location = new Point(953, 95 + brh);
pics[i].Name = "pic" + i;
pics[i].Size = new Size(300, 75);
pics[i].ImageLocation = "E:/image"+i;
flws[i].Controls.Add(pics[i]);

txts[i] = new TextBox();
txts[i].Name = "txt" + i;
txts[i].Location = new Point(953, 186 + brh);
txts[i].TextChanged += Form1_TextChanged;
flws[i].Controls.Add(txts[i]);

butns[i] = new Button();
butns[i].Click += new EventHandler(butns_Click);
butns[i].Text = "submit";
butns[i].Name = "but" + i;
butns[i].Location = new Point(1100, 186 + brh);

flws[i].Controls.Add(butns[i]);
this.Controls.Add(flws[i]);
flowLayoutPanel1.Controls.Add(flws[i]);
brh += 130;
}


private void butns_Click(object sender, EventArgs e)
{
// you can add the procces to perform after dynamically created button pressed
}

关于c# - 如何通过单击按钮动态生成图片框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18540325/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com