C# Windows 表单 - 更新 toolStripLabel 文本 returns 自动滚动面板到顶部

C# Windows Forms - Updating toolStripLabel text returns auto-scrollable panel to top

我设置了以下表格:

http://i.imgur.com/BKBGbGw.png (由于这个帐户是新帐户,我无法 post 图片)

每当我将带下划线的 ToolStripLabel 的文本更新到滚动条 returns 到顶部时,如下所示:

http://i.imgur.com/OVPzDdS.png

这是编辑 ToolStripLabel.Text:

的代码
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;
    }
}

非常感谢任何建议或解决方案。

我添加了复选框,现在我也可以重现此行为。首先我认为它发生是因为当检查状态改变时复选框获得焦点,当然,面板将自动滚动以显示焦点控件。但后来我发现,如果我也更改了 ToolStripLabel 文本,它只会滚动,而不检查 InvokeRequired 属性.

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

如果不是这样,那么您可以尝试调整滚动位置以显示特定控件panel1.ScrollControlIntoView(label1)

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