gpt4 book ai didi

winforms - 仅当文本不适合时,如何才能在 System.Windows.Forms.TextBox 上显示滚动条?

转载 作者:行者123 更新时间:2023-12-03 10:33:24 25 4
gpt4 key购买 nike

对于 Multiline=True 的 System.Windows.Forms.TextBox,我只想在文本不适合时显示滚动条。

这是一个只读文本框,仅用于显示。它是一个 TextBox,以便用户可以将文本复制出来。是否有内置的东西来支持滚动条的自动显示?如果没有,我应该使用不同的控件吗?或者我是否需要 Hook TextChanged 并手动检查溢出(如果是,如何判断文本是否适合?)

对 WordWrap 和 Scrollbars 设置的各种组合没有任何运气。我希望最初没有滚动条,并且仅当文本不适合给定方向时才动态显示每个滚动条。

@nobugz,谢谢,在禁用 WordWrap 时有效。我不想禁用自动换行,但它是两害相权取其轻的。

@André Neves,好点,如果它是用户可编辑的,我会这样做。我同意一致性是 UI 直观性的主要规则。

最佳答案

向您的项目添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到表单上。它不是很完美,但应该适合你。

using System;
using System.Drawing;
using System.Windows.Forms;

public class MyTextBox : TextBox {
private bool mScrollbars;
public MyTextBox() {
this.Multiline = true;
this.ReadOnly = true;
}
private void checkForScrollbars() {
bool scroll = false;
int cnt = this.Lines.Length;
if (cnt > 1) {
int pos0 = this.GetPositionFromCharIndex(this.GetFirstCharIndexFromLine(0)).Y;
if (pos0 >= 32768) pos0 -= 65536;
int pos1 = this.GetPositionFromCharIndex(this.GetFirstCharIndexFromLine(1)).Y;
if (pos1 >= 32768) pos1 -= 65536;
int h = pos1 - pos0;
scroll = cnt * h > (this.ClientSize.Height - 6); // 6 = padding
}
if (scroll != mScrollbars) {
mScrollbars = scroll;
this.ScrollBars = scroll ? ScrollBars.Vertical : ScrollBars.None;
}
}

protected override void OnTextChanged(EventArgs e) {
checkForScrollbars();
base.OnTextChanged(e);
}

protected override void OnClientSizeChanged(EventArgs e) {
checkForScrollbars();
base.OnClientSizeChanged(e);
}
}

关于winforms - 仅当文本不适合时,如何才能在 System.Windows.Forms.TextBox 上显示滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com