【问题标题】:Visual Studio error when adding a library in the Form.Designer.cs在 Form.Designer.cs 中添加库时出现 Visual Studio 错误
【发布时间】:2018-01-09 08:53:08
【问题描述】:

所以基本上我将此代码添加到我的 Form1.Designer.cs:

this.comboBox1.Items.AddRange(Enumerable.Range(0, 30).Cast<object>().ToArray());

这需要在namespace WindowsFormsApp 之上添加using System.Linq;。程序运行得很好,唯一的问题是当我回到 Form1.cs[Design] GUI 部分时,Visual Studio 会返回以下错误:To prevent possible data loss before loading the designer, the following errors must be resolved

我可以忽略这一点,程序运行良好,但我有点担心。是否有另一种方法可以添加using System.Linq; 行而不会让 VS 对你生气?

【问题讨论】:

  • 什么是“以下错误”?

标签: c# visual-studio


【解决方案1】:

没有理由修改您的设计器生成的代码。只需将您的代码行放在您的 Forms 构造函数中,在已经存在的行/区域之后。

【讨论】:

  • 我已经添加了“this.comboBox.SelectedIndex = x;”为所有组合框控件设置默认值。所以你建议将所有手动编写的代码移到表单构造函数中,让设计人员只留下 VS 自动生成的代码,对吧?
  • @ReduxInk 绝对。不要触摸设计器生成的代码。那只是自找麻烦。这就是他们一开始就分开的原因。
【解决方案2】:

我想 Visual Studio 会重写您的文件并删除使用。尝试将您的代码更改为

...System.Linq.Enumerable.Range(0, 30)...

就是这么说的。在调用InitializeComponent()protected virtual void Dispose(bool disposing) 函数(如果存在)之后,您不应在默认构造函数(如果存在)中的任何其他位置向desinger 文件添加代码。

即使这样,您也应该将构造函数或 dispose 函数移动到您的 form1.cs 文件中。

如果您想将项目添加到组合框,请通过属性网格执行此操作,并让 Visual Studio 负责编写设计器文件或在适当的事件处理程序中执行此操作(我建议加载或显示事件)。

InitializeComponent 不是修改控件的正确位置,因为下次您在设计器中打开表单时,项目将添加到组合框中并在保存期间序列化,除非您编写

public Form1()
{
    InitializeComponent();
    bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
    if(!designMode)
    {
        this.comboBox1.Items.AddRange(Enumerable.Range(0, 30).Cast<object>().ToArray());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多