Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 从ComboBox派生的Visual Studio设计器和控件_.net_Visual Studio_Visual Studio 2010_Combobox - Fatal编程技术网

.net 从ComboBox派生的Visual Studio设计器和控件

.net 从ComboBox派生的Visual Studio设计器和控件,.net,visual-studio,visual-studio-2010,combobox,.net,Visual Studio,Visual Studio 2010,Combobox,我试图阻止Visual Studio尝试序列化下拉列表的数据源。它只是一个从数据库加载数据源并从ComboBox继承的简单控件。我用于数据源的对象是不可序列化的,因此当我尝试执行设计器提供的几乎所有操作时都会出错,并表示代码生成失败。我曾尝试将此添加到我的代码中,希望它能阻止VS这样做,但它没有起作用 <Obsolete("This property does nothing.")> <System.ComponentModel.Browsable(False)

我试图阻止Visual Studio尝试序列化下拉列表的
数据源。它只是一个从数据库加载数据源并从ComboBox继承的简单控件。我用于数据源的对象是不可序列化的,因此当我尝试执行设计器提供的几乎所有操作时都会出错,并表示代码生成失败。我曾尝试将此添加到我的代码中,希望它能阻止VS这样做,但它没有起作用

    <Obsolete("This property does nothing.")>
    <System.ComponentModel.Browsable(False)> _
    <System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)> _
    Public Shadows Property Datasource() As Object
        Get
            Return Nothing
        End Get
        Set(ByVal value As Object)

        End Set
    End Property

_
_
公共阴影属性数据源()作为对象
得到
一无所获
结束
设置(ByVal值作为对象)
端集
端属性

它仍然以某种方式访问
数据源
,因此它必须将我的控件视为一个
组合框
,并读取基类属性。我能做些什么来阻止它吗?

不完全是我想的,但我想它确实回答了这个问题,因为我同意控件在设计期间不绑定到数据源,而是使用此属性

if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{
    // design time only stuff
}
else
{
    // runtime only stuff.
}
从这篇文章中:


我可以阻止自己在设计时加载数据源,因此VS没有任何尝试序列化的内容。

如何从数据库加载数据源?听起来设计师也在努力做到这一点。问题不在发布的代码中。@LarsTech,问题不在发布的代码中,而是在VS设计器中(没有可用的代码)。我将数据源加载到构造函数中,出于某种原因,VS正在努力序列化我加载的数据源,然后将其放入
InitializeComponent
函数中。设计器确实必须运行空构造函数。如果不是Me.DesignMode,那么如果将
放在数据源设置前面,它是否有效?这就是Shadows关键字的危害。它只是添加了一个新属性,而不是替换现有属性。您不能取消继承属性,只有当原始属性是虚拟的(可在vb.net中重写)时,才能执行此操作。数据源不是虚拟的。TypeDescriptor可以解决这个问题,你必须认真解决这个问题。
.DesignMode
不起作用,但我找到了一个使用
System.ComponentModel.LicenseManager
的方法,它可以工作,这样我在设计时就不会填充数据源,所以它没有任何可序列化的内容。