在文本更改事件期间垂直滚动Scintilla文本框

这是一个完整的VS2010项目来重现这个问题: http : //temp-share.com/show/dPf3aqi7W

使用字符串设置Scintilla.Net文本框并滚动到最后一行不起作用。

这个Q&A 如何在Scintilla中进行自动滚动? 有答案,但它不会在设置文本的同时工作。

光秃秃的骨头:

private void button1_Click(object sender, EventArgs e) { string s = RandomString(400); scintilla1.Text = s + " " + s + " " + s + " " + s + " " + s; scintilla1.Scrolling.ScrollBy(0, 10000); //<-doesn't work (but does work eg in a Button2_click) } private static Random random = new Random((int)DateTime.Now.Ticks); private string RandomString(int size) { StringBuilder builder = new StringBuilder(); char ch; for (int i = 0; i < size; i++) { ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); builder.Append(ch); } return builder.ToString(); } 

有没有人知道如何在设置文本后垂直向下滚动到结束行?

那么你可以在添加文本后尝试放置Refresh();

scintilla1.Text = s +“”+ s +“”+ s +“”+ s +“”+ s;
scintilla1.Refresh();

对于这种情况,我发现你需要刷新()两次取决于你放在文本框上的字符串的长度。

对于最终想知道的人,我放弃了Scintilla,转而支持ICSharpCode.TextEditor 。 < - 这个有点不稳定所以我使用了Digitalshane版本的ICsharp.TextEditor

我发现与Scintilla相比, 增强ICSharpCode.TextEditor是微不足道的。

ICSharpCode.TextEditor的另一个巨大好处是允许您自定义/构建自己的语法突出显示,例如: https : //github.com/icsharpcode/SharpDevelop/wiki/Syntax-highlighting