首页 > 解决方案 > 为什么VS2017总是丢失我的派生控件?

问题描述

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

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

internal class DRT_Button_CancelSearch : DRT_Button_Abstract
{
    ....
}

internal class DRT_Button_StartSearch : DRT_Button_Abstract
{
    ....
}

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

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

我尝试忽略错误,进入 UI 设计器窗口以重新应用丢失的控件,但问题只是在新应用的控件上重复出现

到底他妈发生了什么?有没有办法从这种情况中恢复过来?

标签: c#winformsvisual-studioinheritancecontrols

解决方案


这很可能是 Designer 无法清除/重新加载其缓存的问题。你无能为力。过去我:

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

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

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

还要确保您创建的所有控件都具有公共默认构造函数,并且在使用此构造函数时运行良好。


推荐阅读