表单高度和宽度的测量方式与TextBox高度不同

时间:2017-08-15 05:36:47

标签: c# winforms components

我使用函数为类创建文本框以生成文本框数组,并且我希望将网格居中到表单中。经过一些调试后,我意识到表单高度和宽度的测量尺度与文本框的宽度和高度不同。 变量的值:

  • 身高= 50
  • width = 50
  • numCols = 10
  • numRows = 10
  • vertCellOffset = 50
  • horzCellOffset = 50

    private TextBox AddNewTextBox()
    {
        SOSTextBox txtBox = new SOSTextBox();
        this.List.Add(txtBox);
        hostForm.Controls.Add(txtBox);
        txtBox.Height = height;
        txtBox.Width = width;
        float scrnWidth = hostForm.Width;
        float scrnHeight = hostForm.Height;
        txtBox.Top = (int)(((int)((Count - 1) / numCols) + 1) * vertCellOffset + (scrnHeight / 2 - ((numRows / 2 + 1) * vertCellOffset)));
        txtBox.Left = (int)((((Count - 1) % numCols) + 1) * horzCellOffset + (scrnWidth / 2 - ((numCols / 2 + 1) * horzCellOffset)));
        txtBox.ArrayLocation = new Point ((Count - 1) / numCols, (Count - 1) % numCols);
        txtBox.Tag = Count;
        txtBox.Font = new Font(txtBox.Font.FontFamily, height / 6.0f); // makes font size 1/3 of the height of textBox
        txtBox.Text = "\r\n";
        txtBox.KeyPress += new KeyPressEventHandler(KeyPressHandler);
        return txtBox;
    }
    

1 个答案:

答案 0 :(得分:0)

我在这里看不到任何问题,但文本框和表格都是"测量"像素。您需要关注的是表单ClientSize或ClientRectangle(两者都以像素为单位)。

如果您的表单没有自动调整大小,那么在表单Load事件中,您可以调用SetClientSizeCore(width,height),其中width和height是" box"的大小。它包含你所有的texstbox。