代码之家  ›  专栏  ›  技术社区  ›  Natrium

如何使文本框的固定宽度为17.5厘米?

  •  9
  • Natrium  · 技术社区  · 15 年前

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

    我做错什么了?

    3 回复  |  直到 10 年前
        1
  •  7
  •   Xenan    13 年前

    方法graphics.dpix没有给出监视器每英寸的实际点。它返回Windows显示属性中设置的dpi,主要是96或120 dpi。

    无法读取监视器的实际dpi。微软确实在Windows Vista/7上研究过这一点,但只要显示器制造商不提供从显示器硬件读取值的标准方法,它就不可能实现。

        2
  •  3
  •   digEmAll    15 年前

    是的,不幸的是Xenan是对的。 为了解决这个问题,您可以允许用户进行某种手动校准。

    例如,在屏幕上画一条400像素的线,让用户在屏幕上测量并设置结果。现在计算校准的ppi(每英寸像素)非常简单。

        3
  •  0
  •   Mark Menchavez    10 年前

    大小结构的width属性取决于图形类的pageUnit和pageScale设置。尝试使用这些设置来获得您想要的效果。由于您很可能需要在控件的绘制事件上修改这些设置,我建议您创建自己的自定义文本框控件。