Yudho Sakti Ответов: 2

Picturebox иногда не показывает изображение


я создал простой читатель манги с несколькими PictureBox, чтобы содержать изображение каждой страницы. Затем элемент управления PictureBox добавлены для управления flowlayoutpanel сверху вниз.
Проблема в том, что есть какое-то изображение, которое не отображается, и когда я изменяю размер формы, оно появляется.
Скриншот в помощь

imglayout = FlowLayoutPanel

Что я уже пробовал:

chapterList.AddRange(Directory.GetDirectories("Gosu"));
            chapterList.Sort(new NumComparer());
            //load chapter pertama
            //simpan image di ram
            foreach (string item in Directory.GetFiles(chapterList[numChapter]))
            {
                imgList.Add(item);
            }
            imgList.Sort(new NumComparer());
            //buat picturebox
            this.SuspendLayout();
            foreach (string i in imgList)
            {
                Image img = Image.FromFile(i);
                PictureBox box = new PictureBox();
                box.Width = img.Width;
                box.Height = img.Height;
                box.BorderStyle = BorderStyle.FixedSingle;
                box.Image = img;
                if (boxwidth < img.Width) { boxwidth = img.Width; }
                imgLayout.Controls.Add(box);
            }
            this.Width = boxwidth+300;
            this.MinimumSize = new Size(boxwidth+300, 550);

Ralf Meier

Вы никогда не получите решение, если не будете работать с нами ...
Что было не так с моим решением ...?

2 Ответов

Рейтинг:
5

Alan N

Я видел подобную вещь и не имел никакого успеха с различными комбинациями Suspend/Resume/PerformLayout. Наконец я обнаружил, что добавление pictureboxes в скрытую панель было эффективным, и с тех пор у меня не было никаких проблем. Я не могу предложить никакого объяснения успеха этого метода, поэтому представьте его как нечто, что можно попробовать.

private void ShowAlbum(Image[] thumbnails) {
  List<PictureBox> pictureBoxList = new List<PictureBox>();
  foreach (Image img in thumbnails) {
    PictureBox box = new PictureBox();
    box.Image = img;
    pictureBoxList.Add(box);
  }

  flowPanel.Hide();
  flowPanel.Controls.AddRange(pictureBoxList.ToArray());
  // pbox handles are created when the container control is reshown
  flowPanel.Show();
}

Алан.


Рейтинг:
0

Ralf Meier

Установите размерный режим каждого из ваших Boxex для масштабирования
и
в конце этого метода вставьте команду ResumeLayout(True)
и
возможно, было бы полезно отправить недействительную форму в форму