首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过点击按钮来动态生成图片框?

如何通过点击按钮来动态生成图片框?
EN

Stack Overflow用户
提问于 2013-08-31 03:38:06
回答 2查看 29.2K关注 0票数 5

我正在尝试将图片框动态地添加到C# win32表单中,用于我正在尝试构建的接近生产质量的应用程序,并且我已经完成了相当多的工作。

我遇到的问题是,我似乎不能在一个方法中动态地向窗体添加图片框或控件。我已经通过Form1初始化方法将它们添加到表单中,但是如果我在button_click方法中添加控件,那么除非我有一个面板容器并输入panel1.Controls.Add(panel1.Controls.Add),否则它不会添加它们。但是,picturebox出现在一个完全不同的位置,而不是预期的位置--显然,它被面板本身阻止了。picturebox的大部分内容都被面板屏蔽了,其中一部分在面板之外。我不知道发生了什么。

下面是我在网上学到的代码,用来在按钮单击方法中添加图片框:

代码语言:javascript
复制
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时,我已经看到这个东西弹出,所以这不是问题所在。问题似乎不在于我的语法,因为我能够复制

代码语言:javascript
复制
PictureBox pb = new PictureBox();

代码直接插入到Form1方法中,它执行得很好。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-01 13:14:00

事实证明,问题是有一个picturebox作为程序的背景图像,它几乎和winform本身一样大。picturebox阻止了所有以编程方式创建的控件,因此给人一种代码什么也不做的错觉。

票数 3
EN

Stack Overflow用户

发布于 2013-08-31 12:25:43

希望这段代码能帮助你理解概念:这是我在flowlayoutpanel中动态创建picturebox、textbox和button的代码。

代码语言:javascript
复制
   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
     }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18540325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档