Visual C # 2010 Express: одинаковая форма, но разный размер на Win7 и WinXP - PullRequest
2 голосов
/ 27 октября 2010

Я использую Visual C # Express 2010 на Win7 и XP.

У меня есть проект приложения Windows Form, и существует SevenXPForm (наследует форму).

Я создал егов Visual C # Express 2010 на Win7 и на панели свойств я задаю

.MinimumSize = 300, 300
.Size = 300, 300

, а TabControl находится в середине формы:

alt text

Однако, когда я сохраняю проект / решение и открываю в Visual C # Express 2010 на WinXP, размер изменяется на:

.MinimumSize = 300, 279
.Size = 300, 279

И TabControl больше не является серединой формы:

alt text

Когда я снова открываю его на Win7, он возвращается.

Это преследует меня, потому что мое приложение должно работать как на XP, так и на XP.Семь, (и Vista).

Нужно ли что-то устанавливать, чтобы позволить ему вести себя одинаково как на Win7, так и на WinXP?

Peter

Ответы [ 5 ]

1 голос
/ 27 октября 2010

Проблема, с которой вы сталкиваетесь, заключается в том, что границы вокруг формы различаются в Windows XP и Windows 7. Это приводит к тому, что размеры окон различаются.Как .NET пытается решить эту проблему, вместо сохранения размера окна, как вы видите его в диалоговом окне свойств, он на самом деле сохраняет ClientSize, который является внутренним размером окна.В диалоге свойств вы видите размер, преобразованный для включения внешних границ.Это означает, что когда вы открываете проект в Windows XP, которая имеет меньшие границы, .NET пытается настроить.

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

Относительно вашей работы вокруг.Другой подход к вашей конкретной проблеме / решению будет заключаться не в автоматическом изменении размера элемента управления вкладками, а в том, чтобы .NET сделал это за вас.Если вы установите Padding формы, например, 10, 10, 10, 10 и установите Dock элемента управления вкладками на Fill, вы получите тот же эффект.

Я не вижу общего решенияздесь, потому что, если это проблема в преобразовании, которое делает сама .NET, это становится очень трудным.

0 голосов
/ 18 июня 2013

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

1) нарисовать панель1
2) panel1.Dock = DockStyle.Fill in Form1_Load section;
3) теперь вы можете использовать panel1 width и height, чтобы получить реальную ширину и высоту Form1, независимо от того, какую ОС (Win XP или 7) вы используете, независимо от стиля границы.

0 голосов
/ 15 января 2013

Пожалуйста, посмотрите на эту ссылку:

http://msdn.microsoft.com/en-us/library/ms229605.aspx

-

Быстрый просмотр

Автоматическое масштабированиепозволяет форме и элементам управления, разработанным на одном компьютере с определенным разрешением экрана или системным шрифтом, отображаться соответствующим образом на другом компьютере с другим разрешением дисплея или системным шрифтом.Это гарантирует, что форма и ее элементы управления будут разумно изменять размер, чтобы соответствовать собственным окнам и другим приложениям на машинах пользователей и других разработчиков.Поддержка .NET Framework для автоматического масштабирования и визуальных стилей позволяет приложениям .NET Framework поддерживать согласованный внешний вид по сравнению с собственными приложениями Windows на компьютере каждого пользователя.

0 голосов
/ 09 ноября 2010

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

0 голосов
/ 27 октября 2010

После того, как я много гуглю, все равно не могу найти решение. Но у меня есть слово, чтобы частично решить мою проблему:

private void SevenXPForm_Load(object sender, EventArgs e)
{
    tabControl1.Width = this.ClientSize.Width - tabControl1.Left * 2;
    tabControl1.Height = this.ClientSize.Height - tabControl1.Top * 2;
}

Это просто обходной путь, я думаю, что должен быть лучший способ сделать это.

(Что если в форме много элементов управления? Конечно, мы можем поместить панель в качестве единственного дочернего элемента управления формы, а затем добавить все остальные элементы управления в эту панель, что работает, но это слишком утомительно )

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