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

У меня есть панель (с автопрокруткой), которая содержит случайно расположенные 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)


arrow_upward
0
arrow_downward

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

person Felipe Ramos    schedule 08.03.2013

arrow_upward
0
arrow_downward

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

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

person Camilo Aguilar    schedule 08.03.2013

arrow_upward
0
arrow_downward

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

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

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

person Stuart Whitehouse    schedule 08.03.2013