c# Windows窗体-更新toolStripLabel文本返回可自动滚动面板到顶部

本文关键字:滚动 顶部 返回 窗体 Windows 更新 文本 toolStripLabel | 更新日期: 2023-09-27 18:04:00

我设置了以下表单:

https://i.stack.imgur.com/CuwCP.png(我不能发布图片,因为这个帐户是新的)

每当我更新带下划线的ToolStripLabel文本时,滚动条就会返回顶部,如下所示:

https://i.stack.imgur.com/9yZu3.png

这是编辑ToolStripLabel的代码。文本:
private void OnTimedEvent(object source, EventArgs e)//requests data
{
    try
    {
        if (commTool != null)
        {
            pollTimer.Stop();
            commTool.Poll();
            writeRequests(commTool.PollCount.ToString());
            if (!stopTimer)
            {
                pollTimer.Start();
            }
            if (errorRate < 0.25)
            {
                setColour(Color.Green);
            }
            else if (errorRate > 0.25 && errorRate < 0.5)
            {
                setColour(Color.GreenYellow);
            }
            else if (errorRate > 0.5 && errorRate < 0.75)
            {
                setColour(Color.Yellow);
            }
            else
            {
                setColour(Color.Red);
            }
        }
        else
        {
            Console.WriteLine("Error MainMenu.cs, OnTimedEvent(): commTool = null");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error MainMenu.cs, OnTimedEvent(): " + ex.ToString());
    }
}
public void writeRequests(string pollCount)
{
    requests = commTool.PollCount;
    if (statusBar.InvokeRequired)
    {
        SetTextCallback d = new SetTextCallback(writeRequests);
        Invoke(d, new object[] { pollCount });
    }
    else
    {
        tsLblRequests.Text = "Requests: " + pollCount;
    }
}

c# Windows窗体-更新toolStripLabel文本返回可自动滚动面板到顶部

我添加了复选框,现在我可以重现这种行为。首先我认为这是因为复选框在复选状态改变时聚焦了,当然,面板会自动滚动以显示聚焦的控件。但后来我发现,它只会滚动,如果我改变ToolStripLabel文本以及,没有检查InvokeRequired属性。

我看到你已经调用时,更改tsLblRequests的文本,但可能有一些其他标签,这是需要调用。我想可能是这样。

如果不是这种情况,那么您可以尝试调整滚动位置以显示panel1.ScrollControlIntoView(label1)的特定控制。

如果ScrollControlIntoView方法不够灵活,那么VScrollBar控制可能更适合您。