public void OutLog(string txtdat, Color textColor) { Action<string, Color> action = delegate (string txt, Color color) { GOB.gob.ReceiveTxtBox.SelectionColor = color; GOB.gob.ReceiveTxtBox.AppendText(txt); }; Action clear = delegate { GOB.gob.ReceiveTxtBox.Clear(); }; Action selebar = delegate { GOB.gob.ReceiveTxtBox.Select(0, 0); }; Action scrollbar = delegate { GOB.gob.ReceiveTxtBox.ScrollToCaret(); }; if (ReceiveTxtBox.InvokeRequired) { ReceiveTxtBox.Invoke(action, txtdat, textColor); } else { action(txtdat, textColor); } } 我按你这方法试验了,显示是正常的,但内容超过ReceiveTxtBox尺寸时,滚动条没有向下滚动?
时间: 2024-04-18 07:28:37 浏览: 69
如果在 `OutLog` 函数中内容超过 `ReceiveTxtBox` 控件尺寸时,滚动条没有自动滚动,你可以在追加文本之后手动将滚动条滚动到底部。你可以在 `OutLog` 函数的委托中添加相应的代码来实现。
以下是修改后的代码示例:
```csharp
public void OutLog(string txtdat, Color textColor)
{
Action<string, Color> action = delegate (string txt, Color color) {
GOB.gob.ReceiveTxtBox.SelectionColor = color;
GOB.gob.ReceiveTxtBox.AppendText(txt);
GOB.gob.ReceiveTxtBox.ScrollToCaret(); // 添加滚动到底部的逻辑
};
Action clear = delegate { GOB.gob.ReceiveTxtBox.Clear(); };
Action selebar = delegate { GOB.gob.ReceiveTxtBox.Select(0, 0); };
Action scrollbar = delegate { GOB.gob.ReceiveTxtBox.ScrollToCaret(); };
if (ReceiveTxtBox.InvokeRequired)
{
ReceiveTxtBox.Invoke(action, txtdat, textColor);
}
else
{
action(txtdat, textColor);
}
}
```
在上述示例中,我们在追加文本后立即调用 `ScrollToCaret` 方法,将滚动条滚动到最底部。这样可以确保在内容超过控件尺寸时,滚动条会自动滚动到最新追加的文本处。
请注意,在使用 `Invoke` 方法时,确保在窗口句柄已创建的情况下调用,以免引发异常。
阅读全文