2016-08-26 2 views
0

Je le formulaire ci-dessous mis en place:C# Windows Forms - Mise à jour du texte ToolStripLabel retourne panneau auto-défilement vers le haut

http://i.imgur.com/BKBGbGw.png (je ne peux pas poster des images en raison de ce compte étant nouveau)

Chaque fois que mettre à jour le texte du ToolStripLabel souligné la barre de défilement revient en haut, comme indiqué ci-dessous:

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

C'est le code qui modifie la 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; 
    } 
} 

Des conseils ou des solutions sont très appréciés.

+0

Pourriez-vous ajouter la version .NET Framework et la capture d'écran de Document Outline? (lors de la conception du formulaire, accédez à Affichage -> Autres fenêtres -> Structure du document) –

+0

.NET Framework version: 4.6.01055 Structure du document: http://i.imgur.com/IHKYNiD.png (pnlRoomSettings.Controls sont copiés pour Panel1 et Panel1.AutoScroll est défini sur true) –

+0

J'ai créé un formulaire avec Panel et ToolStrip avec ToolStripLabel défilant sous le Panel, mais la mise à jour du texte ToolStripLabel (même à partir d'un autre thread) n'affecte en rien la barre de défilement. Pourriez-vous faire un exemple reproductible minimal et le télécharger quelque part? –

Répondre

0

J'ai ajouté une case à cocher et maintenant je peux aussi reproduire ce comportement. J'ai d'abord pensé que cela se produisait parce que la case à cocher était focalisée lorsque l'état de vérification a changé et, bien sûr, le panneau défile automatiquement pour montrer le contrôle ciblé. Mais alors j'ai découvert qu'il ne défilera que si j'ai aussi changé le texte de ToolStripLabel, sans vérifier la propriété InvokeRequired.

Je vois que vous invoquez déjà lors de la modification du texte de tsLblRequests, mais il se peut qu'il y ait d'autres labels qui nécessitent une invocation. Je pense que cela pourrait être le cas.

Si ce n'est pas le cas, vous pouvez essayer d'ajuster la position de défilement pour montrer un contrôle spécifique avec panel1.ScrollControlIntoView(label1).

Si la méthode ScrollControlIntoView n'est pas assez flexible, alors le contrôle VScrollBar fonctionnera mieux pour vous.