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

时间:2013-04-23 00:06:45

标签: c# .net scroll scintilla

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

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

这个Q& How make autoscroll in Scintilla?有答案,但在设置文字的同时它不会

Bare bones repro:

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();
}

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

2 个答案:

答案 0 :(得分:1)

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

  

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

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

答案 1 :(得分:0)

对于最终想知道的人,我放弃了Scintilla,转而支持ICSharpCode.TextEditor。 &lt; - 这个有点不稳定所以我使用了Digitalrune version of the ICsharp.TextEditor

我发现enhancing the ICSharpCode.TextEditor与Scintilla相比微不足道。

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