У меня есть панель (с автопрокруткой), которая содержит случайно расположенные 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. Иногда я нахожу элементы управления неуместными (в отличие от их прежнего положения) после загрузки.
Некоторое время ошеломлял мой разум, я действительно надеюсь, что найду какую-то информацию здесь.
Ответ 1 · Felipe Ramos
Не уверен во всех конфигурациях, которые вы используете, но убедитесь, что шаги приращения для полос прокрутки являются целыми числами. Затем убедитесь, что элементы управления добавляются обратно в дерево элементов управления панели, а не в родительскую форму, и установите местоположение.
Ответ 2 · Camilo Aguilar
Вы можете использовать файл app.config для сохранения этих настроек, поэтому, когда они вам понадобятся, вы просто сделаете вызов настроек для ключа внутри app.config.
Я думаю, что нет правильного способа, что бы вы ни чувствовали себя лучше, это работает, но если вы собираетесь иметь динамически создаваемые элементы управления, у вас может быть база данных, как сейчас. Но если их будет немного, лучше подойдет файл app.config.
Ответ 3 · Stuart Whitehouse
Я предполагаю, что вы хотите восстановить элементы управления в их текущее визуальное положение после прокрутки, и поэтому вы принимаете во внимание автоматическую прокрутку? Когда вы говорите, что элементы управления неуместны, они сместились относительно друг друга или все они "прокручиваются" в неправильное положение?
Вы уверены насчет Math.Abs? Это кажется несколько странным; Я бы попробовал просто добавить Location.X и AutoScrollPosition.X (или использовать -AutoScrollPosition.X)
Я бы также проверил при восстановлении, что AutoScrollPosition в настоящее время равен 0.