Загружайте файлы изображений и создавайте элементы управления динамически.#
Я создаю приложение windows form, которое позволяет пользователям загружать файлы изображений с url-адреса и устанавливать изображения в picturebox, создавая PictureBox, две кнопки и текстовое поле динамически для каждого изображения.
Что я уже пробовал:
Ниже приведен мой код для загрузки файла изображения с помощью цикла в методе form_load
noofimages = no of images imagesnames = array containing images names uploadnumber= folder name created with images for (int i = 0; i < Globals.noofimages; i++) { client = new WebClient(); string url = "http://www.upload2printer.co.il/public/uploads/" + Globals.uploadnumber + "/" + Globals.imagesnames[i] + ""; Uri uri = new Uri(url); byte[] bytes; bytes = client.DownloadData(uri); MemoryStream ms = new MemoryStream(bytes); Globals.images[i] = System.Drawing.Image.FromStream(ms); create_controls(i); } Now create_controls(i) is a method responsible for creating the controls private void create_controls(int index) { PictureBox pb = new PictureBox(); pb.Image = Globals.images[index]; pb.Size = new Size(200, 120); Button b1 = new Button(); Button b2 = new Button(); TextBox noofprints = new TextBox(); b1.Size = new Size(20, 20); b1.Name = index.ToString(); b1.Text = "+"; b1.Location = new Point(x, y + 125); b1.Click += new EventHandler(button_Click); b2.Size = new Size(20, 20); b2.Text = "-"; b2.Name = index.ToString(); b2.Location = new Point(x + 180, y + 125); b2.Click += new EventHandler(button_Click); noofprints.Name = index.ToString(); noofprints.Size = new Size(160, 18); if (status == 0) { noofprints.Text = "1"; } else if (status == 1) { noofprints.Text = Globals.noofcopy[index].ToString(); } noofprints.TextAlign = HorizontalAlignment.Center; noofprints.Location = new Point(x + 20, y + 125); pb.SizeMode = PictureBoxSizeMode.StretchImage; pb.Location = new Point(x, y); x += pb.Width + 10; maxheight = Math.Max(pb.Height, maxheight); if (x > this.panel1.Width - 100) { x = 20; y += maxheight + 30; } this.panel1.Controls.Add(b1); this.panel1.Controls.Add(b2); this.panel1.Controls.Add(noofprints); this.panel1.Controls.Add(pb); }
Теперь, когда я запускаю приложение и эта форма открывается, форма отображается только тогда, когда все фотографии загружены и все элементы управления созданы.
Что я хочу сделать, так это загрузить каждую фотографию, а затем создать соответствующие элементы управления во время отображения формы.
Я также изучил многопоточность, асинхронность и ожидание,но ничего не смог понять.
Я новичок и программист - самоучка, поэтому знаю, что мой код не идеален, поэтому мне нужна ваша помощь в решении этого вопроса.
Заранее спасибо.