C# Windows Forms - Обновление текста toolStripLabel возвращает автоматически прокручиваемую панель вверх

У меня установлена ​​следующая форма:

http://i.imgur.com/BKBGbGw.png(я не могу публиковать изображения из-за того, что этот аккаунт новый)

Всякий раз, когда я обновляю текст подчеркнутой ToolStripLabel, полоса прокрутки возвращается наверх, как показано ниже:

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

Любые советы или решения очень ценятся.

1 ответ

Я добавил флажок, и теперь я могу воспроизвести это поведение. Сначала я подумал, что это происходит, потому что флажок фокусировался при изменении состояния проверки, и, конечно, панель автоматически прокручивается, чтобы показать сфокусированный элемент управления. Но потом я обнаружил, что он будет прокручиваться, только если я изменил текст ToolStripLabel, не проверяя InvokeRequired имущество.

Я вижу, что вы уже вызываете при изменении текста tsLblRequests, но, возможно, есть некоторые другие метки, которые требуют вызова. Я думаю, что это может быть так.

Если это не так, то вы можете попытаться отрегулировать положение прокрутки, чтобы показать определенный элемент управления с panel1.ScrollControlIntoView(label1),

Если ScrollControlIntoView метод не достаточно гибок, то может быть VScrollBar контроль будет работать лучше для вас.

Другие вопросы по тегам