Panel AutoScrollPosition оставляет пробелы между элементами

Может ли кто-нибудь объяснить, почему приведенный ниже код оставляет пробелы между вставленными элементами и как это исправить?

введите здесь описание изображения

private void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
    {
        if (outLine.Data != null && !String.IsNullOrWhiteSpace(outLine.Data))
        {
            this.lineCount++;
            Label TestLBL = new Label();
            TestLBL.Text = outLine.Data.TrimStart();
            TestLBL.Name = this.lineCount.ToString();
            TestLBL.AutoSize = true;
            TestLBL.Location = new Point(10, panel1.Controls.Count * 20);

            BeginInvoke(new MethodInvoker(() =>
            {
                panel1.Controls.Add(TestLBL);
                panel1.AutoScrollPosition = new Point(10, this.lineCount * 20);


            }));
        }
    }

person TomTommyTom    schedule 11.01.2017    source источник


Ответы (1)


Поскольку вы не используете FlowLayoutPanel, вам придется компенсировать положение полосы прокрутки, чтобы получить правильное местоположение:

TestLBL.Location = new Point(10, panel1.AutoScrollPosition.Y + panel1.Controls.Count * 20);

Вероятно, вам следует поместить весь этот код создания элемента управления GUI внутрь этого блока BeginInvoke. Элементы управления графическим интерфейсом создаются в потоке графического интерфейса.

person LarsTech    schedule 11.01.2017
comment
Отличный материал. Большое спасибо!! - person TomTommyTom; 11.01.2017