Как придать текстовому окну фиксированную ширину 17,5 см? - PullRequest
9 голосов
/ 18 мая 2010

У меня есть приложение с текстовым полем, и ширина текстового поля на экране всегда должна составлять 17,5 сантиметров на экране пользователя.

Это то, что я пробовал до сих пор:

const double centimeter = 17.5; // the width I need
const double inches = centimeter * 0.393700787; // convert centimeter to inches

float dpi = GetDpiX(); // get the dpi. 96 in my case.

var pixels = dpi*inches; // this should give me the amount of pixels
textbox1.Width = Convert.ToInt32(pixels); // set it. Done.



private float GetDpiX()
{
    floar returnValue;
    Graphics graphics = CreateGraphics();
    returnValue = graphics.DpiX;
    graphics.Dispose(); // don’t forget to release the unnecessary resources
    return returnValue;
}

Но это дает мне разные размеры с разными разрешениями.

Это дает мне 13 см с 1680 x 1050 и 21,5 см с 1024 x 768 .

Что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 18 мая 2010

Метод graphics.DpiX не дает реальных точек на дюйм монитора. Возвращает значение DPI, установленное в свойствах экрана Windows, в основном 96 или 120 DPI.

Невозможно прочитать реальный DPI монитора. Microsoft проводила исследования для Windows Vista / 7, но пока производители мониторов не предоставляют стандартный способ считывания значений с оборудования монитора, это будет невозможно.

3 голосов
/ 18 мая 2010

Да, к сожалению, Ксенан прав. Чтобы обойти проблему, вы можете разрешить ручную калибровку, выполненную пользователем.

например. Нарисуйте линию размером 400 пикселей на экране, попросите пользователя измерить ее на экране и установите результат. Теперь действительно просто рассчитать PPI (пикселей на дюйм), который является вашей калибровкой.

0 голосов
/ 19 декабря 2014

Свойство Width структуры Size зависит от настроек PageUnit и PageScale класса Graphics. Попробуйте поиграть с этими настройками, чтобы получить желаемый эффект. Поскольку вам, скорее всего, нужно изменить эти параметры в событии Paint элемента управления, я предлагаю вместо этого создать свой собственный элемент управления TextBox.

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