我有一个文本框的. multiline属性设置为true。每隔一段时间,我都会向它添加新的文本行。我希望文本框自动滚动到最底部的条目(最新的一个)每当添加一个新的行。我该怎么做呢?


当前回答

我需要添加一个刷新:

textBox1.SelectionStart = textBox1.Text.Length;
textBox1.ScrollToCaret();
textBox1.Refresh();

其他回答

在。net 4.0中,接口似乎发生了变化。以下方法可以实现上述所有功能。正如Tommy Engebretsen所建议的,将其放在TextChanged事件处理程序中可以使其自动完成。

textBox1.ScrollToEnd();

您可以使用以下代码片段:

myTextBox.SelectionStart = myTextBox.Text.Length;
myTextBox.ScrollToCaret();

它会自动滚动到最后。

这只对我有用……

txtserialloging ->Text = "";

txtSerialLogging->AppendText(s);

我尝试了上面所有的情况,但问题是,在我的情况下,文本可以减少,增加,也可以长时间保持静态。 静态的意思是,静态的长度(线条)但内容不同。

所以,当长度(行)在一段时间内保持不变时,我在最后面临一个行跳转的情况……

我用这个。简单、干净、快捷!

txtTCPTxRx.AppendText(newText);

下面是我使用的实际代码

ThreadSafe(() =>
      {
          string newLog = $"{DateTime.Now:HH:mm:ss:ffff->}{dLog}{Environment.NewLine}";
          txtTCPTxRx.AppendText(newLog);
      });

对于登陆这里希望看到webforms实现的其他人,您应该使用Page Request Manager的endRequest事件处理程序(https://stackoverflow.com/a/1388170/1830512)。以下是我在母版页的内容页中为我的文本框所做的,请忽略我没有为控件使用变量的事实:

var prm = Sys.WebForms.PageRequestManager.getInstance();

function EndRequestHandler() {
    if ($get('<%= ((TextBox)StatusWindow.FindControl("StatusTxtBox")).ClientID %>') != null) {
        $get('<%= ((TextBox)StatusWindow.FindControl("StatusTxtBox")).ClientID %>').scrollTop = 
        $get('<%= ((TextBox)StatusWindow.FindControl("StatusTxtBox")).ClientID %>').scrollHeight;
    }
}

prm.add_endRequest(EndRequestHandler);