Сохранение местоположения элементов управления и загрузка его обратно

У меня есть панель (с автопрокруткой), которая содержит случайно расположенные UserControls, я хочу сохранить расположение этих элементов управления и загрузить их позже, чтобы они были размещены именно там, где они были раньше.

Как правильно это сделать в .NET? На данный момент это то, что я сохраняю в базе данных как X, Y:

X: Math.Abs(panel.AutoScrollPosition.X) + control.Location.X;

Y: Math.Abs(panel.AutoScrollPosition.Y) + control.Location.Y;

И когда я загружаю элемент управления, я делаю: control.Location = new System.Drawing.Point(X, Y);

Но я думаю, что что-то упускаю из-за того, как AutoScroll ведет себя в .NET. Иногда я нахожу элементы управления неуместными (в отличие от их прежнего положения) после загрузки.

Некоторое время ошеломлял мой разум, я действительно надеюсь, что найду какую-то информацию здесь.


person prettyvoid    schedule 08.03.2013    source источник


Ответы (3)


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

person Felipe Ramos    schedule 08.03.2013

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

Я думаю, что нет правильного способа, что бы вы ни чувствовали себя лучше, это работает, но если вы собираетесь иметь динамически создаваемые элементы управления, у вас может быть база данных, как сейчас. Но если их будет немного, лучше подойдет файл app.config.

person Camilo Aguilar    schedule 08.03.2013

Я предполагаю, что вы хотите восстановить элементы управления в их текущее визуальное положение после прокрутки, и поэтому вы принимаете во внимание автоматическую прокрутку? Когда вы говорите, что элементы управления неуместны, они сместились относительно друг друга или все они «прокручиваются» в неправильное положение?

Вы уверены насчет Math.Abs? Это кажется несколько странным; Я бы попробовал просто добавить Location.X и AutoScrollPosition.X (или использовать -AutoScrollPosition.X)

Я бы также проверил при восстановлении, что AutoScrollPosition в настоящее время равен 0.

person Stuart Whitehouse    schedule 08.03.2013