【问题标题】:Drag and drop the user control won't work in .net windows project拖放用户控件在 .net windows 项目中不起作用
【发布时间】:2011-06-22 19:39:38
【问题描述】:

我创建了一个用户控件,它作为表单组件显示在工具箱上。然后,当我尝试将用户控件拖放到表单上时,我收到了这个 Visual Studio 错误。

"指定的命名连接要么在配置中找不到,要么不打算与实体客户端提供程序一起使用,要么无效。"

为什么会出现此错误?

但我可以拖放一些其他用户控件,它们位于同一个项目下。我不知道我在创建这个用户控件时错过了什么。

【问题讨论】:

  • 该项目使用实体框架作为数据源,当我使用实体框架注释掉代码时,它似乎在工作......这与实体模型有关吗??

标签: c# controls


【解决方案1】:

请注意,UserControl 类中的代码在设计时运行。构造函数、OnLoad 方法和 Load 事件。但也有像 OnPaint() 这样的方法。如果此代码所做的任何事情都取决于正确设置的环境,则该代码可能会引发异常并导致设计人员改变主意,将控件添加到表单中。当您收到“未在配置中找到”错误时,似乎就是这种情况,还没有配置文件。

正确使用 DesignMode 跳过此类代码。像这样:

    protected override void OnLoad(EventArgs e) {
        if (!this.DesignMode) {
            // Do stuff...
        }
        base.OnLoad(e);
    }

【讨论】:

    【解决方案2】:

    正如Hans 所说,您可能需要在构造函数或 OnLoad 中使用 DesignMode 属性。另外,请确保使用连接的任何公共属性都具有此属性:

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public string Foo
    {
        get;
        set;
    }
    

    这样,当您将控件添加到表单时,设计器不会尝试设置它们。无论如何,对于您不会在设计时设置的属性,这始终是一个好习惯。

    【讨论】:

      【解决方案3】:

      如果你把从数据库加载数据的代码放到userControl的构造函数中,就会出现这个错误。

      “加载数据或初始化实体框架”

      所以解决方案是将加载数据的代码从构造函数移到方法中。你可以称它为“loadData”。

      并在父窗体的构造函数中调用此方法“loadData”

      【讨论】:

        猜你喜欢
        • 2011-05-19
        • 1970-01-01
        • 2023-04-08
        • 2011-02-19
        • 2017-11-10
        • 1970-01-01
        • 2016-05-23
        • 2017-01-18
        相关资源
        最近更新 更多