【问题标题】:WinForm Controls are transparent, and not displaying properlyWinForm 控件是透明的,无法正常显示
【发布时间】:2014-01-10 14:47:45
【问题描述】:

当表单加载时,我希望它显示加载图像(在图片框内)和带有一些文本的标准 Windows 标签。然而,我看到的只是白盒子,或者有时我看到下面的另一种形式。如何让图像和标签正确显示。

我尝试在表单加载时将AllowTransparency 设置为false,并将表单的透明键设置为其他颜色,但没有任何效果。

项目是C#.Net v3.5(也试过v4和v4.5)。

有什么想法吗?

【问题讨论】:

  • GUI 一次只能做一件事。当它“加载表单”时,它也不能保持 GUI 更新。显式调用表单的 Update() 方法,使其至少完全绘制。通过在工作线程上运行昂贵的代码(如 dbase 查询)或使用 async/await 来获得成功。
  • 我在表单中找不到更新方法。我快速浏览了线程,但从示例中我发现它不允许我从线程内修改表单标签。
  • Form 类有一个 Update() 方法。继承自 Control 类。最好让编译器来查找它,否则不知道“我找不到它”可能意味着什么。这是一个实例方法,以防万一。
  • 当我说我找不到它时,它不在表单的“属性”窗口中,也不在 Intellisense 中。
  • 对于“它不起作用”的问题来说,这真是糟糕透顶的一天。再次拔牙:您在 IntelliSense 下拉菜单中看到了什么?更高效的是,您的代码实际上是什么样的?请不要让我们猜测它。

标签: c# winforms


【解决方案1】:

首先,您无法显示图像,忙等待,然后更改图像 - 这永远不会重绘任何内容,导致您描述的症状。要“等待”,您需要将控制权返回给您的主应用程序循环,以便它可以继续处理消息(例如,处理窗口的重绘请求)。一种方法是显示您的初始状态(启动屏幕),然后使用计时器稍后回叫您以将显示更改为您的第二个状态。

您面临的下一个问题是使用具有透明度的表单控件。大多数控件将“透明”视为“用父控件颜色填充背景”,这不是您想要的。解决此问题的一种简单方法是实现一个 Paint 处理程序并为自己绘制图像和文本 - 这使您可以更好地控制显示的外观,并且还可以让您获得更清晰的重绘(没有闪烁或其他问题引起显示正在建立,但在几个控件中是按位建立的)

最后,考虑将初始屏幕显示实现为在加载期间显示在主窗体上方的单独控件/窗体,因为这样可以轻松“叠加”在主窗体上,而无需更改其设计。

【讨论】:

  • 透明度只是一个神器,获得透明度的一个好方法是不画:)
  • 我不想更改图像 - 我希望它显示图像而不是白框。如果我删除图像,只有标签,它也不会显示!
【解决方案2】:

formObjectName.Show()之后写formObjectName.Refresh()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 2011-08-31
    • 2010-10-30
    • 2012-01-29
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多