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
控件可能更适合您。
我设置了以下表格:
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
控件可能更适合您。