Зависимое от шрифта управление позиционированием - PullRequest
2 голосов
/ 01 сентября 2008

Я бы хотел использовать Segoe UI 9 pt в Vista и Tahoma 8 pt в Windows XP / etc. (На самом деле, я бы согласился на Segoe UI на обоих, но мои пользователи, вероятно, не установили его.) Но, будучи совершенно другими, они действительно испортили макет моих форм. Итак ... есть ли хороший способ справиться с этим?

Пример: у меня есть Label с некоторым пробелом в середине, в который я помещаю NumericUpDown элемент управления. Если я использую пользовательский интерфейс Segoe, NumericUpDown составляет около 5 пикселей или около того слева от пустого пространства, по сравнению с тем, когда я использую Tahoma. Это боль; Я не уверен, что здесь делать.

Поэтому, в частности, мой вопрос будет таким: как я могу разместить элементы управления в середине пустого пространства в моих Label s (или CheckBox es и т. Д.)? В целом: есть ли хороший способ обрабатывать различные шрифты в Windows Forms?

Редактировать : Я не думаю, что люди поняли вопрос. Я знаю, как изменять мои шрифты в зависимости от ОС. Я просто не знаю, как справиться с проблемами макета , которые возникают в результате этого.

Ответ ajryan, quick_dry : Хорошо, ребята, вы понимаете вопрос. Я полагаю, что MeasureString может сработать, хотя я бы заинтересовался дальнейшим изучением более эффективных способов решения этой проблемы.

Проблема с разделением элемента управления наиболее очевидна, скажем, при CheckBox. Там, если пользователь нажимает на «вторую половину» CheckBox (который будет отдельным Label элементом управления, я полагаю), CheckBox не меняет состояние.

Ответы [ 4 ]

3 голосов
/ 01 сентября 2008

Я поддерживаю использование TableLayoutPanel для однострочных встроенных элементов управления.

Я обычно устанавливаю для каждого столбца и первой строки значение AutoSize и для свойства Dock каждого дочернего элемента управления устанавливается значение Fill в конструкторе. Это заставляет горизонтальное расположение отображаться правильно. Чтобы расположить текстовую строку между метками / текстовыми полями, установите для свойства TextAlign значение MiddleLeft.

Если ваш текст переходит на следующую строку, нет простого решения. Использование Graphics.MeasureString / TextRenderer.MeasureText и некоторой причудливой логики переноса - ваша лучшая ставка: (

1 голос
/ 01 сентября 2008

это проблема разработки размещения элементов управления? то есть вы знаете, что шрифты X и Y работают в OS A и B и задаете нужный вам макет с текстом, который вы используете в этих системах?

Метод MeasureString может помочь в разработке макета таким образом, чтобы вы не были привязаны к определенным шрифтам.

float textWidth = graphics.MeasureString (someString, someFont) .Width;

(сработает ли выравнивание текста? Возможно, я тоже неправильно понял проблему)

1 голос
/ 01 сентября 2008

Странно, что нужно расположить один элемент управления внутри другого. Возможно, вы неправильно решаете проблему с исходным кодом. Можете ли вы разделить метку на две метки с возможностью обновления между ними и, возможно, полагаться на панель таблиц Windows Forms?

Если необходимо попытаться расположить на основе размеров шрифта, вы можете использовать Graphics.MeasureString («Строка до обновления», myLabel.Font)

Если то, что вам нужно, это управление шрифтом в зависимости от шрифта, вам, вероятно, следует повторить вопрос.


[править] Вы можете обработать событие щелчка части «второй половины» надписи и изменить состояние флажка для этого события. Все это похоже на хак. Какую проблему решает эта странная схема управления? Зачем вам вверх-вниз в середине этикетки?
1 голос
/ 01 сентября 2008

Прежде всего вы можете узнать, какую версию Windows вы используете, с помощью свойства OperatingSystem.Platform в системной библиотеке.

Во-вторых, возможно, что вы можете поместить настройки шрифта в файлы ресурсов и определить, какой файл ресурсов использовать в зависимости от определенных условий (например, версия вашей операционной системы).

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

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

...