Добавление элементов управления в Panel работает сначала пару раз, а затем исчезает - PullRequest
1 голос
/ 17 ноября 2010

Вот скриншоты:

alt text alt text

Вот код, который я использую для загрузки PictureBoxes на панель:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WebServiceScanner
{
    public partial class MainForm : Form
    {
        int pictureYPosition = 8;
        public MainForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            LoadImageFromScanner();
        }

        private void LoadImageFromScanner()
        {
            Image pic = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg");
            PictureBox pictureHolder = new PictureBox();
            pictureHolder.Image = pic;
            pictureHolder.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureHolder.Size = new System.Drawing.Size(180, 250);

            pictureHolder.Location = new Point(13, pictureYPosition);
            panel1.Controls.Add(pictureHolder);

            pictureYPosition += 258;

        }      
    }
}

Что можетбыть причиной проблемы?На панели автопрокрутки установлено значение true, так что, может быть, это вызывает проблему?

ВАЖНОЕ РЕДАКТИРОВАНИЕ:

Изображения загружаются абсолютно ИЗВЕСТНО, если я не касаюсь полосы прокруткии оставить его в исходном положении (самый верхний).Если я прокручиваю вниз и добавляю картинки, то, похоже, у меня другое представление о том, где на самом деле я говорю.

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

Панель прокручивает свое содержимое, изменяя свойство Location дочерних элементов управления при перемещении полосы прокрутки. Вы должны сделать это самостоятельно, когда добавите изображение. Исправлено:

pictureHolder.Location = new Point(13, pictureYPosition + panel1.AutoScrollPosition.Y);
1 голос
/ 17 ноября 2010

Не уверен, поможет ли это.Прежде чем добавить его в панель, вызовите panel1.SuppressLayout(), а затем вызовите panel1.ResumeLayout(true).

Другой вариант - использовать FlowLayoutPanel вместо того, чтобы каждый раз вручную увеличивать расстояние.

0 голосов
/ 31 марта 2014

Решение, которое сработало для меня, заключалось в подавлении и возобновлении вывода Скотта.

Чтобы вычесть положение автопрокрутки Y, ничего не сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...