.NET Windows 窗体设计时规则

2023-11-28

我有一个对象启动一个线程,打开一个文件,并等待来自其他类的输入。当它接收输入时,会将其写入磁盘。基本上,它是一个线程安全的数据记录类......

这是奇怪的部分。当我在使用该对象的设计器 (Visual Studio 2008) 中打开表单时,就会创建文件。它显然是在设计时虚拟主机进程下运行的......

奇怪的是我无法在另一个项目中重现这个问题。我不确定在设计器中执行的代码和不在设计器中执行的代码的规则是什么。例如,在 Windows 窗体构造函数中创建文件实际上并不在设计时创建该文件......

解释是什么?有参考吗?


在设计器中编辑该类时,不会执行控件或表单的构造函数(也不会调用 OnLoad)。我偶尔会使用它在设计器中设置一个值(例如,使其子控件在设计器中全部可见),但在构造函数中将其中一些重写为不同的默认值(例如,隐藏某些仅显示的子控件)在某些情况下,例如状态栏上的指示器)。

然而,构造函数does如果该控件作为子控件放置在设计器中的另一个控件或窗体上,则会执行。 OnLoad 也会被执行。这可能是您的日志记录代码在设计器中意外触发的原因。

为了检测设计与运行时,一个答案 to 另一个问题有一些经验测试的屏幕截图,显示了一些常见方法返回的值。看起来,设计器中正在编辑的窗体或控件的子控件(向下两级)的子控件看到它自己的 DesignMode == false,因此正常的属性检查将无法保护代码(例如,在 OnLoad 方法中) ) 对于嵌套在设计器中添加的控件内的控件。如果您按照预期检查 DesignMode,则可能是嵌套导致它绕过了该检查。它还总是在构造函数中看到 DesignMode == false。

另请注意 LicenseManager.UsageMode 检查only在构造函数中看到 DesignTime;当 OnLoad 被调用时,它位于 RunTime LicenseContext 内。最完整的解决方案似乎是在控件或表单(或组件)的构造函数中检查 LicenseManager.UsageMode 并将设置保存到成员变量或属性中,您可以稍后检查以避免运行不应在设计器中运行的代码即使嵌套时。还有另一种方法另一个答案对于另一个问题,它解释了嵌套但仅在构造函数之外起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET Windows 窗体设计时规则 的相关文章

随机推荐

  • javascript 检查结束日期是否大于或等于开始日期

    是否可以检查 Javascript 中的结束日期是否大于或等于开始日期 我的日期是格式为 dd mm yyyy 的字符串 try this var startDate 05 01 2011 var endDate 09 01 2011 va
  • x86 上存储到加载转发失败的成本是多少?

    在最新的 x86 架构上 存储到加载转发失败的成本是多少 特别是 存储到加载转发会失败 因为加载部分与较早的存储重叠 或者因为较早的加载或存储跨越某些导致转发失败的对齐边界 当然存在延迟成本 它有多大 是否还存在吞吐量成本 例如 失败的存储
  • 在 Windows 8 中将用户重定向到桌面浏览器

    如果用户使用 Windows 8 RT 浏览器访问我的网页 是否有办法强制或提示用户使用 Windows 8 桌面浏览器 我希望能够使用 Silverlight 等插件 是的 您可以提示用户切换到桌面版本 微软将其添加为需要它的网站的后备
  • 如何在 Git 历史记录中 grep(搜索)已提交的代码

    我过去删除过一个文件或文件中的某些代码 我可以搜索内容 而不仅仅是提交消息 吗 一个非常糟糕的解决方案是 grep 日志 git log p grep
  • 将子 iframe 中的事件附加到父窗口中的处理程序

    我无法直接访问此 iframe 的源代码 因此如果可能的话 我想这样做 我有一个由 JS 生成的 iframe 里面有一个提交按钮和一个取消按钮 提交按钮工作正常 但我希望取消按钮关闭包含 iframe 的此模式 我还希望提交按钮发送 th
  • 如何在 ASP.NET 5 Identity 中设置PasswordHasherCompatibilityMode.IdentityV3?

    目前看来默认设置为PasswordHasherCompatibilityMode IdentityV2这是 ASP NET 5 中的 HMAC SHA1 我尝试创建一个实例PasswordHasherOptions添加到服务 DI 但无法使
  • 用户控制验证组问题

    我在页面上有两个用户控件实例 两者都有字段和一个提交按钮 我已经在字段和验证器上设置了验证组 但由于某种原因 在验证两个用户控件的验证器时会触发 这个方法也有效 Dim valGroup String format 0 validation
  • GCC默认main返回值不为零

    我有一些没有从 main 显式返回的 C 程序 如下所示 int main int argc char argv blah blah 如果我使用 GCC 4 6 3 和以下选项编译它们 gcc file c Wall Wextra 程序不会
  • ImmutableList.builder() 错误?

    我刚刚开始学习番石榴 我注意到一些奇怪的事情ImmutableList builder 这不能编译 List
  • 根据变量快速调整窗口大小

    我有一个NSViewController和一个变量num 我想根据该变量动态更改窗口的大小 有什么办法可以快速做到这一点吗 假设您的窗口有一个名为 window 的 IBOutlet 并且您的动态号码名为 myDynamicNumber f
  • Scala 2.10 中的 Iterator.size 错误?

    这是正常的吗 scala gt val x Iterator List String str lol Iterator List String non empty iterator scala gt x size res1 Int 1 sc
  • 在 iFrame 中显示的 PDF 上绘制坐标

    首先 我很感激我的要求相当 雄心勃勃 但非常感谢任何帮助 因为我不确定继续进行的最佳方式 在我的网站 使用 PHP MySQL 构建 上 用户上传 PDF 后 我想在页面上内嵌显示 PDF 我假设在 iFrame 中 然后我需要他们能够在
  • 处理 jQuery.getScript 中的错误

    jQuery 的获取脚本函数似乎不支持错误回调函数 我不能在这里使用全局 ajax 错误处理代码 本地错误函数将是理想的选择 回调获取 data textStatus 的文档似乎不正确 回调两者都没有获取 关于如何检测 getScript
  • Flask 上下文堆栈的用途是什么?

    我已经使用请求 应用程序上下文一段时间了 但没有完全理解它是如何工作的或者为什么它是这样设计的 当涉及到请求或应用程序上下文时 堆栈 的目的是什么 这两个堆栈是独立的 还是同一个堆栈的一部分 请求上下文是压入堆栈 还是堆栈本身 我可以在彼此
  • 像在android市场中一样滑动标签栏[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 有谁知道如何像android市场中那样实现该栏 类别 特色 最高付费 我也在新版本的SuperUser中看到了它 所以我知道它可以完成 谢谢你的回复 感谢塞尔文的回复 按照建议查
  • 以最佳方式将矩形装配在一起

    我想知道是否有人知道任何适合将 N 个未知大小的矩形组装成可能的最小包含矩形的算法 我所说的最佳是指减少生成的包含矩形中剩余的空白量 我想用它从一系列图像生成 css 精灵 非常感谢 Ian 我认为你所描述的是 二维装箱 问题的一个变体 唯
  • 隐式转换:const 引用与非 const 引用与非引用

    考虑这段代码 struct A struct B B const A void f B cout lt lt f lt
  • 如何使用 Rails 和 minitest 模拟 OmniAuth 哈希?

    我正在使用 Rails 5 和 minitest 我想模拟登录到我的会话控制器 它依赖于omniauth 我使用Google和FB进行登录 我的控制器测试中有这个 test controllers rates controller test
  • 为什么这个明显的无限递归不会给出编译器警告? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 许多个月前 我不得不修复一
  • .NET Windows 窗体设计时规则

    我有一个对象启动一个线程 打开一个文件 并等待来自其他类的输入 当它接收输入时 会将其写入磁盘 基本上 它是一个线程安全的数据记录类 这是奇怪的部分 当我在使用该对象的设计器 Visual Studio 2008 中打开表单时 就会创建文件