Элементы управления WinForms смещаются при каждом просмотре формы - PullRequest
5 голосов
/ 31 августа 2009

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

Это не проблема, если свойства Anchor или Dock установлены неправильно. Редактор фактически изменяет свойство Location моих элементов управления. Я посмотрел на файл .designer.cs и не вижу ничего необычного. Я пытался удалить и воссоздать эти элементы управления, но проблема сохраняется.

Есть идеи, что я могу сделать?

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

Редактировать: Visual Studio фактически извлечет файл автоматически, чтобы установить для Location то, что он упрямо считает нужным.

Ответы [ 5 ]

2 голосов
/ 04 июня 2012

Я нашел ответ на эту проблему, но для меня это просто ошибка. Это никогда не было решено с 2003 года!

Вкратце: визуальное наследование плохо работает с привязкой.

Полный ответ здесь: http://weblogs.asp.net/rweigelt/archive/2003/09/24/28984.aspx

2 голосов
/ 30 мая 2012

Редактор WinForms - это WYSIWYG, который требует от редактора фактического выполнения кода макета, чтобы точно показать, как будет выглядеть форма. Хотя это очень удобно, есть ряд проблем с курицей и яйцами, которые начинают портить ваш редактор.

Общая проблема заключается в определении размера. Иногда управляющие свойства упорядочены неправильно (и, будучи автоматически сгенерированными, вы не можете это исправить). Результатом является то, что некоторое необходимое значение не устанавливается до тех пор, пока не будет указано свойство, которое нуждается в нем. Известный пример - SplitContainer и MinSize для Panel2 (см. http://social.msdn.microsoft.com/Forums/en-US/winformsdesigner/thread/ee6abc76-f35a-41a4-a1ff-5be942ae3425).. Возможно, у вас возникла похожая корневая проблема, но в результате местоположение ваших элементов управления меняется.

Я бы проанализировал порядок ваших свойств в Designer и попытался бы определить, может ли это быть причиной проблемы. Если это так, вам может потребоваться установить какое-либо свойство во время выполнения. Тем не менее, в общем, редко существует истинное «исправление» - разрешение чаще, чем не «обходной путь».

Подобные проблемы были частью мотивации для создания WPF. Декларативный характер XAML помогает предотвратить подобные случаи, в то же время обеспечивая ощущение WYSIWYG.

1 голос
/ 30 мая 2012

Я согласен с PaulG, скорее всего это проблема, связанная с DPI

Пожалуйста, измените настройки видеокарты с Большой (120 точек на дюйм) на Нормальный (96 точек на дюйм).

0 голосов
/ 31 августа 2009

Попробуйте заблокировать элементы управления в режиме разработки, а затем посмотрите, как это происходит.

0 голосов
/ 31 августа 2009

Скорее всего, проблема связана с DPI. Проверьте файл designer.cs для свойства AutoScaleMode и попробуйте изменить его (или добавить один), чтобы установить форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...