visual 继承当前被禁用,因为基类引用设备特定的组件或包含 p/invoke(转)

Visual Studio(C#.net)开发Wince设备程序的时候,自定义的控件在设计时会出现如题的问题。更奇怪的问题就是一开始没有这样的问题,但对控件进行了某些功能的扩展而增加了代码,或者添加了新的控件以后,就出现了这样的问题,那么这个问题造成的原因是什么呢?又可以通过什么方法解决呢?以下摘用两段文字进行说明。

引自MSDN http://msdn.microsoft.com/zh-cn/library/ms228851.aspx

该消息的全文如下:

因为基控件有设备特定的控件,所以当前禁用 Visual 继承。

当基控件或基窗体具有设备特定的控件或组件时,托管项目中可能出现该消息。

可以导致这种状态的情况包括以下几种:

  • 继 承窗体的父窗体或继承用户控件的父控件包含设备特定的控件。在这种情况下,无法看到继承窗体或继承用户控件的设计器。

  • 窗 体或用户控件包含设备特定的控件,此控件从另一个窗体或用户控件继承。在这种情况下,无法看到继承窗体或继承用户控件的设计器。

  • 项 目引用设备特定的程序集,如 Microsoft.WindowsCE.Forms.dll。

  • 项目或项目引用的程序集包 括平台调用。如果您能够确定不会在设计时执行平台调用,则通过将 DesktopCompatible(true) 属性放置在父窗体或父用户控件中,可以安全地启用可视继承。

引自csdn博客 http://blog.csdn.net/sohighthesky/archive/2009/06/07/4249129.aspx

当自定义控件所在的dll中出现了DllImport 属性时候,自定义类型的控件属性就不能正常显示在属性窗口了

通过将 DesktopCompatible(true) 属性放置在父窗体或父用户控件中,可以安全地启用可视继承

先在项目中添加一个“设计时属性文件”默认名为DesignTimeAttributes1.xmta

然后在其中添加如下节点

<Class Name="SmartDeviceProject1.Form1">  

<DesktopCompatible>true</DesktopCompatible>  

</Class>  

SmartDeviceProject1.Form1为被继承的类名,要包括namespace部分。

ok,这样应该就能解决问题了

如果自己写的控件类,需要在设计视图中显示内容也可以通过在此文件中添加如下节点:

<Class Name="ImageButton">  

  <DesktopCompatible>true</DesktopCompatible>  

  <Property Name="Size">  

  <DefaultValue>  

  <Type>System.Drawing.Size, System.Drawing, Version=2.0.0.0, Culture=neutralPublicKeyToken=b03f5f7f11d50a3a</Type>  

   <Value>16, 16</Value>  

  </DefaultValue>  

  </Property>  

</Class>  

这里ImageButton为控件的类名,要包括namespace部分。
posted @ 2012-04-26 19:21  bluealarm  阅读(3283)  评论(0编辑  收藏  举报