John Whitmire Ответов: 2

Почему form.clientsize перемещает мои кнопки в windows 10?


У меня есть довольно простое служебное приложение, первоначально написанное в VS 2010. Когда я обновил свою машину разработки до Windows 10, приложение работало без изменений, но две кнопки в одном диалоговом окне переместились на 23 пикселя вверх, где они частично скрыты меткой. Раздражает, но какое-то время терпимо.
Сегодня я решил, что пришло время исправить эту ошибку, поэтому я перенес проект на VS 2015 в Windows 10 (с тем же самым .Чистая версия указана). Когда я открываю конструктор форм для этого диалога, конечно же, кнопки имеют высоту 23 пикселя. Поэтому я переместил их обратно в нижнее правое якорное положение, в котором они находятся, и сохранил форму. Затем я сравнил текущую и предыдущие версии файлов формы, и единственная строка, которая изменилась, находится в файле designer.cs:
this.ClientSize = new System.Drawing.Size(284,93);
В VS 2010 под Windows 7 93 было 94. Если я изменю 93 обратно на 94, кнопки вернутся в свои неправильные места, и VS изменит 94 обратно на 93. Документация MSDN по ClientSize звучит так, как будто ее следует рассматривать только для чтения, и не упоминает о том, какой эффект может иметь ее изменение.
Поиграв с файлом designer.cs (только для усмешек), я обнаружил, что если я исправлю местоположения в этом файле, VS изменит их обратно в неправильные местоположения. Единственный способ поместить кнопки туда, где они должны быть, - это переместить их в графический дизайнер, а затем поместить их в те же места, в которые я не мог их отредактировать. Иди разберись.
Очевидно, что нужно делать для моей версии Windows 10, но мой аналитический мозг не любит не знать, почему это происходит. Довольно ясно, что это разница между Windows 7 и 10, но...
Почему только этот диалог?
Почему только эти две пуговицы?
И вообще, какое отношение к этому имеет размер клиента?

Что я уже пробовал:

Поискал MSDN в разделе Form.ClientSize.

Ralf Meier

Несколько вопросов :
- какой .Net-фреймворк вы используете ?
- в вашей форме : какие настройки у вас есть в свойстве "AutoScaleMode"?
- где находятся эти 2 элемента управления ?

John Whitmire

Смотрите мой ответ Мацею лосу.

2 Ответов

Рейтинг:
14

John Whitmire

Ну-ну. Изменение привязки этих кнопок с нижнего правого на верхний правый (что я мог бы сделать, потому что форма не может расти вертикально) приводит к тому, что кнопки остаются на своем законном месте в обеих версиях Windows.
Другие сопутствующие данные:
* Одна кнопка на другой форме закреплена в правом верхнем углу.
* Все остальные нижние правые якорные кнопки находятся в UserControls, все из которых закреплены сверху слева.

Спасибо за предложение, Ральф!!


Maciej Los

5ed!

Рейтинг:
0

John Whitmire

@Ralf Meier и @Maciej Los: я смог сделать проверку, где единственная разница-это O/S. Он дал некоторые ответы и открыл другие вопросы.
Когда я открыл проект VS2010 в VS2015 под Windows 7, та же разница появилась и в конструкторе форм. (Просто открыв проект или конструктор форм-я не знаю, что именно-изменил расположение кнопок в файле *designer.cs.) Я сделал то же самое "исправление", переместив кнопки обратно в их правильное положение, и сохранил форму. Сохраненные файлы (*.cs и *.resx) не изменились по сравнению с тем, как они были до открытия проекта! Но теперь форма выглядела правильной в VS2015.
Я построил приложение с VS2015 и запустил его на обеих версиях O/S. Он прекрасно выглядел на Win7, где был построен, но переместил кнопки в Win10. Я попробовал обратное, построив в Win10 и выполнив в Win7, и произошло то же самое.
Еще раз обратите внимание, что разница, упомянутая в ОП, - это единственное различие, которое я могу найти среди теперь уже трех копий проекта. Приложение имеет еще одну форму с несколькими пользовательскими элементами управления на ней. Я не видел ничего другого, на что повлиял бы обмен между версиями O/S или версиями VS. Макет элемента управления и его свойства одинаковы. Поля, отступы и т. д.-Все это по умолчанию. Якорь находится внизу справа для этих кнопок и для большинства других на другой форме и ее пользовательских элементах управления. Файл csproj определяет клиент .NET 4 в обоих сценариях.
Таким образом, кажется, что версии O/S имеют небольшую разницу в рендеринге, которая проявляется в этом сценарии. Новый вопрос заключается в том, почему разница отображается в конструкторе VS2015 под Win7 до тех пор, пока я не сохраню файлы формы в VS2015. В этот момент что-то скрытое изменяется, и конструктор форм затем визуализирует, как и ожидалось, но без внесения каких-либо изменений в сгенерированный исходный код.

Maciej Los

Джон,
Похоже, я ничем не могу вам помочь ;(
Я бы посоветовал доложить об этом Мисс

Ralf Meier

Привет Джон,
Я должен сказать, что у меня были некоторые проблемы в прошлом с якорными элементами управления - независимыми от их контейнера. Мне кажется, что вы находитесь в той же точке. Кроме того, для меня это всегда было как-то связано либо с ОС, либо с измененным (на большее) разрешением экрана. В зависимости от ОС может изменяться основная форма-поведение (внешний вид). Поэтому я решил (для себя) всегда работать с фиксированными местоположениями или с вычисленными местоположениями и размерами элементов управления (и, возможно, размерами шрифтов).
Может быть, это также может быть способом для вас ...

John Whitmire

Спасибо за Ваш вклад. Я думаю, что запишу это в категорию "просто потому, что" в Microsoft и двинусь дальше.
@Ralf, я приму ваше предложение и переместю якорь для этих кнопок в верхний правый угол, так как форма не может расти вертикально. Интересно будет посмотреть, сработает ли это.

Ralf Meier

Будьте так добры и расскажите о результатах ваших "исследований" ...

John Whitmire

Бинго! Топ и Внизу была серебряная пуля.