为什么 VS2017 总是丢失我的派生控件?

Why does VS2017 keep losing my derived controls?

在我的应用程序 namespace = DRT 中,我正在创建控件 classes(例如,按钮、文本框),它们派生自相应的 Windows 控件 classes,例如,

internal abstract class DRT_Button_Abstract : Button
{
    ....
}

internal class DRT_Button_CancelSearch : DRT_Button_Abstract
{
    ....
}

internal class DRT_Button_StartSearch : DRT_Button_Abstract
{
    ....
}

我目前总共有 13 个派生的 classes,它们要么来自我的一个摘要,要么来自 Windows 控制 class。成功构建后,我在工具箱上看到了我的控件 classes(例如,DRT_Button_CancelSearchDRT_Button_StartSearch),我成功地将它们放到了我的主窗体上。暂时一切都很好,但最终,我会去打开主 form.cs [设计](即 UI 设计器),它会显示一些错误 The variable '{control property name}' is either undeclared or was never assigned.我的控件的组合。

当我检查主窗体 Designer.cs 文件时,除了预期的 new 语句之外,所有控件的预期代码都存在。它们不存在于主窗体 Designer.cs 文件中。例如,我希望看到 this.drt_Button_CancelSearch = new DRT.DRT_Button_CancelSearch(); 但没有看到

我已经尝试忽略错误,继续使用 UI 设计器 windows 重新应用丢失的控件,但问题只是在新应用的控件上重复出现

这到底是怎么回事?有没有办法从这种情况中恢复过来?

这很可能是设计器无法 clear/reload 缓存的问题。你无能为力。过去我:

  • 关闭并重新打开所有具有用户控件的设计器
  • 将所有控件放在一个单独的项目中(在同一个解决方案中)
  • 将所有控件放在单独的 solution/Visual Studio 实例中并设置对控件的 dll(甚至 nuget 包)的正确引用

对于前两个选项,我取得了不同程度的成功。重新打开设计器不是很方便,也不行。

最后一个选项是最好的,但也是最烦人的,因为每次调整都需要重建项目并更新 reference/package。

还要确保您创建的所有控件都具有 public 默认构造函数,并且在使用此构造函数时能够正常运行。