【问题标题】:Pictureboxes on all forms don't update所有表单上的图片框都不会更新
【发布时间】:2012-10-21 10:34:43
【问题描述】:

我打开了许多表单(一次又一次地打开相同的新表单)。它们都是图片框,应该会自动更新。但是,当我启动多个时,除了最后选择/单击/活动的表单之外,表单上的图片框不会在视觉上更新..所有代码都可以正常工作。但是,当我单击其中一个表单时,它会按原样更新。这会更清楚:http://i50.tinypic.com/2csaooh.jpg 如果你仔细观察(或者我知道......)只有左边的第一个表格正在更新,其他的图片框都没有...... 如果需要任何额外信息。我会提供的。

paint 事件包含许多 e.graphics.draw...(...);代码..就是这样..我一直在更新背景(我把背景属性..不是图像作为背景)。

【问题讨论】:

  • 了解如何更新 PictureBox 会有所帮助。或许致电Invalidate() 会有所帮助。
  • 我确实使用 picturebox.Invalidate();在图片框的绘制事件结束时。
  • 所以你一次又一次地画图?
  • 没错。他们不停地被绘制,并且大部分都在不断变化..
  • 而且.. 我应该从哪里调用它?因为如果我把这个 FormMain fr;在外面和 fr.Picturebox.Invalidate();在paint事件中,给了我和错误..顺便说一句..我使用的是c#而不是vb。

标签: c# .net picturebox


【解决方案1】:

很遗憾,Invalidate() 仅适用于有焦点的控件。似乎没有很好的方法来强制重绘未聚焦的控件。

然而,这个问题可以用计时器来解决,虽然这很脏:

private void Form1_Deactivate(object sender, EventArgs e)
{
    t = new System.Threading.Timer(new System.Threading.TimerCallback(t_Tick), null, 0, 100);
}

private void Form1_Activated(object sender, EventArgs e)
{
    t.Dispose();
}

void t_Tick(object sender)
{
    pictureBox1.Invoke((Action)delegate()
    {
        pictureBox1.Update();
    });
}

也许您应该考虑将所有控件添加到同一个窗口。您的屏幕截图看起来不需要多个窗口。

【讨论】:

  • 我没有任何问题使一个不集中的窗体上的 PictureBox 控件无效。 (我不是反对者)。
  • 奇怪,我创建了一个测试项目,遇到了和HooCraX一样的问题。在Paint 活动中,您是否做过与绘画和Invalidate()ing 不同的事情?
  • 您在将所有内容添加到一个窗口时是正确的,但您会看到它有 2.5 k 行代码和大约 500 行绑定到控件所以.. 会花费很多时间来做到这一点..我正在尝试你的解决方案,不,我不是反对者..
  • 我在 form2 中添加了一个 PictureBox,将 PictureBox 修饰符更改为 Internal,然后在 form1 上的按钮单击事件中,称为 f2.pictureBox1.Invalidate() 我正在绘制 DateTime.Now.ToString() 并保留时间在未聚焦的 PictureBox 中发生变化。
  • @HooCraX 你为什么这么认为?这是c#。这不会有什么不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多