visual 继承当前被禁用,因为基类引用设备特定的组件或包含 p/invoke(转)
引自MSDN http://msdn.microsoft.com/zh-cn/library/ms228851.aspx
该消息的全文如下:
因为基控件有设备特定的控件,所以当前禁用 Visual 继承。
当基控件或基窗体具有设备特定的控件或组件时,托管项目中可能出现该消息。
可以导致这种状态的情况包括以下几种:
-
继 承窗体的父窗体或继承用户控件的父控件包含设备特定的控件。在这种情况下,无法看到继承窗体或继承用户控件的设计器。
-
窗 体或用户控件包含设备特定的控件,此控件从另一个窗体或用户控件继承。在这种情况下,无法看到继承窗体或继承用户控件的设计器。
-
项 目引用设备特定的程序集,如 Microsoft.WindowsCE.Forms.dll。
-
项目或项目引用的程序集包 括平台调用。如果您能够确定不会在设计时执行平台调用,则通过将 DesktopCompatible(true) 属性放置在父窗体或父用户控件中,可以安全地启用可视继承。
当自定义控件所在的dll中出现了DllImport 属性时候,自定义类型的控件属性就不能正常显示在属性窗口了
通过将 DesktopCompatible(true) 属性放置在父窗体或父用户控件中,可以安全地启用可视继承
先在项目中添加一个“设计时属性文件”默认名为DesignTimeAttributes1.xmta
然后在其中添加如下节点
<DesktopCompatible>true</DesktopCompatible>
</Class>
SmartDeviceProject1.Form1为被继承的类名,要包括namespace部分。
ok,这样应该就能解决问题了
如果自己写的控件类,需要在设计视图中显示内容也可以通过在此文件中添加如下节点:
<DesktopCompatible>true</DesktopCompatible>
<Property Name="Size">
<DefaultValue>
<Type>System.Drawing.Size, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Type>
<Value>16, 16</Value>
</DefaultValue>
</Property>
</Class>
这里ImageButton为控件的类名,要包括namespace部分。