你能告诉我如何设置窗口窗体文本框垂直滚动器,只有当文本大小大于文本框空间时,滚动条才会显示?
谢谢
或者,如果您的 textBox1 是多行的并且包含例如 20 行:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Split('\n').Length > 20)
textBox1.ScrollBars = ScrollBars.Vertical;
else
textBox1.ScrollBars = ScrollBars.None;
}
我能想到的一种方法是将文本框的字体设置为对所有字符具有相同宽度的字体之一,例如Lucida Console
.
然后你测量你需要多少个字符才能到达文本框的末尾。
因此,知道该数字后,TextChanged
仅当文本超过最大数字时,才向事件添加设置滚动条的方法。
private void textBox1_TextChanged(object sender, EventArgs e)
{
int MaxChars = 10; //suppose that's the maximum
if (textBox1.Text.Count() > MaxChars)
textBox1.ScrollBars = ScrollBars.Vertical;
else
textBox1.ScrollBars = ScrollBars.None;
}
您还可以使用以下方法进行计算MaxChars
:
double param1 = figure out this number;
double param2 = figure out this number too;
int MaxChars = (int)(Math.Floor(param1*textBox1.Width - param2));
这样您就可以动态地调整组件的大小。
这是另一种方法:
internal static Size GetTextDimensions(Control control, Font font, string stringData)
{
using (Graphics g = control.CreateGraphics())
{
SizeF sizeF = g.MeasureString(stringData, font);
return new Size((int)Math.Ceiling(sizeF.Width), (int)Math.Ceiling(sizeF.Height));
}
}
用法:
Size dimensions = ControlManager.GetTextDimensions(descriptionTextBox, descriptionTextBox.Font, descriptionTextBox.Text);
descriptionTextBox.ScrollBars = dimensions.Height >
descriptionTextBox.Height ?
ScrollBars.Vertical : ScrollBars.None;
您可能需要根据填充添加或减去,但这很好用。这是一个扩展方法版本:
public static Size GetTextDimensions(this Control control, Font font, string stringData)
{
using (Graphics g = control.CreateGraphics())
{
SizeF sizeF = g.MeasureString(stringData, font);
return new Size((int)Math.Ceiling(sizeF.Width), (int)Math.Ceiling(sizeF.Height));
}
}
您可以将内部包装TextBox
aScrollViewer
并设置VerticalScrollBarVisibility="Auto"
为ScrollViewer
。此代码有效(在 Visual Studio 2012 和 .NET 4.5 上测试):
<StackPanel>
<ScrollViewer Height="100" VerticalScrollBarVisibility="Auto">
<TextBox TextWrapping="Wrap"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Hidden">
</TextBox>
</ScrollViewer>
</StackPanel>
Colby Africa的升级方法
public static Size GetTextDimensions(this TextBox textBox)
{
Font font = textBox.Font;
string stringData = textBox.Text;
int width = textBox.Width;
using (Graphics g = textBox.CreateGraphics())
{
SizeF sizeF = g.MeasureString(stringData, font, width);
return new Size((int)Math.Ceiling(sizeF.Width), (int)Math.Ceiling(sizeF.Height));
}
}