@ Яс,
Это была довольно интригующая проблема - не совсем уловил ее до загрузки / запуска вашего кода. Я согласен с Джими - что вы, вероятно, сталкиваетесь с внутренним ограничением, каким бы странным оно ни казалось. Как вы указали, настройка высоты / ширины формы не должна преодолевать ограничение. Так что, что бы ни происходило внутри, это немного странно и неожиданно.
Но у меня есть решение для вас: это по общему признанию клудж, но иногда это наш единственный вариант. Если спецификациям вашего проекта требуется форма, подобная той, которую вы представили, - форма, значение которой в конечном итоге превышает 100 000, тогда это решение должно отвечать всем требованиям.
Добавьте следующий код в конец кода инициализации Form1, показанного в исходном сообщении (см. Ниже). То, что я сделал, это программно «подправил» высоту формы очень немного - многократно - до тех пор, пока все панели не будут полностью отрисованы. Я думаю, это будет вашим лучшим выбором.
Кстати, я потратил немало времени на это. Я пробовал различные комбинации Refresh () на разных элементах управления, DoEvents () и т. Д., Но безрезультатно. Я даже пытался не использовать стыковку и автоматическое изменение размеров в пользу ручной настройки высоты и высоты (это тоже не работало). Таким образом, я думаю, что приведенный ниже код действительно единственный способ исправить это, кроме исправления от Microsoft.
** Чтобы приведенный ниже код работал, добавьте эту строку сразу после InitializeComponent () вашего кода; строка:
this.Show();
Затем добавьте этот код после закрывающей скобки вашего кода:
// fix the panContents panel
long currentMaximum = 0;
while (true)
{
var preserveHeight = this.Height;
// tweak the height
this.Height += 1;
// set it back the height
this.Height = preserveHeight;
// test to see if the scroll bar max remains at its previous value
// if it does, we're done
if (currentMaximum == panContents.VerticalScroll.Maximum)
break;
// otherwise, preserve the current maximum scroll bar position
currentMaximum = panContents.VerticalScroll.Maximum;
// now scroll to the bottom of the panel
panContents.VerticalScroll.Value = panContents.VerticalScroll.Maximum;
// necessary step to ensure scroll bar value is set
panContents.PerformLayout();
}
// scroll to the top
panContents.VerticalScroll.Value = 0;
// necessary step to ensure scroll bar value is set
panContents.PerformLayout();