形式在设计师中不断变白

时间:2012-09-03 14:38:52

标签: c# winforms forms

当我执行以下步骤时,我的应用程序的主要形式在设计器中不断变为白色:

1)在设计模式下打开表单(此时所有控件都可见) 2)查看表单的源代码 3)切换回设计视图

执行上述步骤后,表单的设计模式(甚至表单)都没有显示。我在我的应用程序中只有一个表单的问题,不幸的是,这是我的主要表单,其中有很多逻辑。解决方法是始终关闭表单并在设计模式下重新打开它,以显示所有组件再次可见。当我的可用内存不足时,我遇到了设计师的不稳定错误,但这种形式总是产生这种症状并且是唯一的。关于是什么导致这个的任何想法?我想我总是可以创建一个新表单并尝试移动所有控件和逻辑但是,如果有更简单的选项,我更愿意避免工作。

3 个答案:

答案 0 :(得分:2)

诊断是控件的Paint事件或OnPaint方法行为不正常。这些方法在设计时运行,因此您将获得控件的精确可视化表示,例如,您可以在设计时看到PictureBox的Image属性。当这样的绘制事件卡在循环中时,整个表单将停止正确渲染。除了一个简单的错误之外,典型的原因是代码在设计模式下被非标准运行时环境所困扰。您可以使用DesignMode属性来确保此类代码不会导致问题,并在设计模式下禁用。

查找行为不当的代码是一项挑战,尤其是当这些代码不是您自己编写的控件时。除了逐个删除控件以找到麻烦制造者之外,您可以通过启动另一个Visual Studio实例来使用调试器,并使用Tools + Attach to Process连接到第一个。

答案 1 :(得分:0)

从个人经验来看,我可以确认这是Visual Studio 2003和Visual Studio中的偶然问题。 2005是否使用VB或C#。我们将这两个版本修补到最新的Service Pack,甚至直接从Microsoft获得了修补程序,这两个版本都没有解决问题。

对于Visual Studio 2003中的VB,控件的消失也删除了底层设计器代码,因此我们不得不从版本控制系统中恢复已删除的代码。非常讨厌 - 因为我们经常丢失代码更改并且必须重新开始。

答案 2 :(得分:0)

您绝对应该检查下一个链接: https://weblog.west-wind.com/posts/2019/Feb/14/WPF-Hanging-in-Infinite-Rendering-Loop?fbclid=IwAR23ZnUrz7buVpFLXOX2qQin1WcifQ6h280EO25URO74NTGDkTedx1TDRb4

这是该页面的引文:

使用StarDefinitionsCanExceedAvailableSpace覆盖此设置 覆盖新的GridRendering行为,基本上可以让您运行 在项目中使用.NET 4.7.x目标,但保留了旧的行为 在以前的版本中使用过。

有一个配置设置可以在app.config中为 您的应用程序:

<configuration>
     <runtime>
        <AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true"
     />
    </runtime>
</configuration>

我可以验证使用该开关可以运行4.7.1,并且在任何缩放模式下都看不到锁定。我之后

我的运行版本为4.6.2,我再次升至4.7.1。 在一个单独的分支中尝试此操作,并确保足够的开关 该应用程序以4.7.1为目标运行。所以有一个hacky 解决方法。

这是一种解决方法。根据Microsoft的此“修复”改进 网格渲染分配,提供更精确的大小调整以及 提高性能并减少内存使用。在纸上,这是一个 很大的进步,但是...很好,副作用?

我怀疑这个问题并不普遍,因为没有太多 有关的信息。我认为Markdown Monster会引起这个问题 之所以出现,是因为启动序列有很多窗口操作。 MM使用MahApps UI框架,该框架使用Window Animation和其他功能 渲染主窗口的框架,而MM本身移动窗口 在屏幕外进行初始渲染,并根据屏幕调整窗口大小 大小和DPI设置(如果窗口不适合屏幕)或 否则将不在屏幕上。 IOW,有一些回旋感 屏幕上的初始窗口更有可能遇到此错误 而不是简单的WPF表单。

所以我怀疑每个应用程序都需要为此担心,但是如果 您有一个4.7.x WPF应用,建议您尝试一下 各种分辨率和比例级别,只是为了了解效果如何。