我需要一种方法来确定多列 TextBox
中显示文本的大小,以便将 Scrollbars
属性设置为正确的值。
由于这是我正在开发的某种增强版 MessageBox
,因此应该从具有换行符的字符串提供的文本的高度和宽度中确定 MessageBox
的大小。
目前,我使用以下代码根据要输入的文本确定 MessageBox
的大小。但是您可以看到 MessageBox
已经确定了一个最大尺寸。文本框本身也启用了 WordWrap
。因此,唯一未定义的是将其插入到 TextBox.Text 后的文本 Height
。
SizeF textSize = this.tbxText.CreateGraphics().MeasureString(message, this.tbxText.Font);
int frmWidth = picWidth + (int)textSize.Width;
if (frmWidth > this.MaximumSize.Width)
{
frmWidth = this.MaximumSize.Width;
}
else if (frmWidth < this.MinimumSize.Width)
{
frmWidth = this.MinimumSize.Width;
}
int frmHeight = picHeight + (int)textSize.Height + pnlButtons.Height + pnlInput.Height;
if (frmHeight > this.MaximumSize.Height)
{
frmHeight = this.MaximumSize.Height;
}
else if (frmHeight < this.MinimumSize.Height)
{
frmHeight = this.MinimumSize.Height;
}
将TextBox.Scrollbars
属性默认设置为Both会在屏幕上留下一个不太好看也不需要的禁用滚动条。遗憾的是,Graphics.MeasureString
并没有真正帮助我们,因为它并没有考虑WordWrap
的行为。
那么,我该如何确定TextBox.Text
是否超出了可见区域,需要垂直滚动条呢?