如何给一个固定宽度为17.5厘米的文本框?

时间:2010-05-18 06:32:33

标签: c# winforms

我有一个带文本框的应用程序,屏幕上文本框的宽度必须始终为用户屏幕上的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 cm 1680 x 1050 21,5 cm 1024 x 768

我做错了什么?

3 个答案:

答案 0 :(得分:7)

方法graphics.DpiX不会给出显示器每英寸的真实点数。它返回Windows显示属性中设置的DPI,主要是96或120 DPI。

无法读取显示器的实际DPI。微软确实对Windows Vista / 7进行了研究,但只要显示器制造商不提供从显示器硬件读取值的标准方法,就不可能。

答案 1 :(得分:3)

是的,不幸的是Xenan是对的。 要解决此问题,您可以通过手动校准,由用户完成。

e.g。在屏幕上绘制一条400像素的线,要求用户在屏幕上测量它并设置结果。现在计算校准的PPI(每英寸像素数)非常简单。

答案 2 :(得分:0)

Size结构的Width属性取决于Graphics类的PageUnit和PageScale设置。尝试使用这些设置来获得所需的效果。由于您很可能需要在控件的Paint事件上修改这些设置,因此我建议您创建自己的自定义TextBox控件。