代码之家  ›  专栏  ›  技术社区  ›  VA systems engineer

为什么VS2017会继续失去我的衍生控制?

  •  0
  • VA systems engineer  · 技术社区  · 7 年前

    在我的应用程序中 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 )在工具箱上,我成功地将它们放到主窗体上。暂时一切正常,但最终,我将打开main 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设计器窗口重新应用丢失的控件,但问题只会在新应用的控件中重复出现。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Emond    7 年前

    这很可能是设计器无法清除/重新加载其缓存的问题。你做不了什么。过去我:

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

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

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

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