[英]Design time error in custom control in compact framework
我正在为紧凑框架(VS2008,目标平台-Windows Mobile 6.1,C#)中的标准ListView控件编写扩展。
该类目前几乎是空的,只有一个方法重写(请参见下面的代码)。 我遇到的问题是:当我将控件放在至少具有ListViewItem的窗体上时,控件在设计时打开时无法初始化。
重现步骤:
ListViewEx : System.Windows.Forms.ListView
覆盖OnHandleCreated
方法:
protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); }
将文件DesignTimeAttributes.xmta
添加到项目中:
<Classes xmlns="http://schemas.microsoft.com/VisualStudio/2004/03/SmartDevices/XMTA.xsd"> <Class Name="CompleteNamespace.ListViewEx"> <DesktopCompatible>true</DesktopCompatible> <DesignTimeVisible>true</DesignTimeVisible> </Class> </Classes>
(用正确的名称空间替换CompleteNamespace
。)
Form1
上的ListBoxEx
。 ListViewItem
。 ListViewEx
View
属性设置为Details
。 在这一点上,我希望看到其中包含一项的列表视图。 相反,VS会引发错误:
控件Microsoft.CompactFramework.Design.HeaderControl在设计器中引发了未处理的异常,并且已被禁用。
例外:
InvalidArgument =值“ -1”对“索引”无效。 参数名称:索引
堆栈跟踪:
在Microsoft.CompactFramework.Design.HeaderControl.OnPaint(PaintEventArgs e)
在Microsoft.CompactFramework.Design.HeaderControl.WndProc(Message&m)
当我按OK
,ListViewEx占位符看起来像这样
此外,如果我将表单打开一段时间(大约一分钟),VS还会引发一个新错误:
属性“ Items”的代码生成失败。 错误是:'InvalidArgument =值'-1'对于'索引'无效。
参数名称:索引'
一些注意事项:
OnHandleCreated
被删除,则控件将按预期工作。 现在,我知道明显的解决方法是避免覆盖OnHandleCraeted
。 但是我想执行一些需要HWND句柄的本机Windows方法,作为初始化例程的一部分。 OnHandleCreated
似乎是正确的选择。 (该控件失败,方法的主体中只有base.OnHandleCreated
)
所以问题是:有没有办法保持OnHandleCreated
覆盖并使控件在设计时工作? 还是另一个:什么时候最好在哪里执行需要HWND句柄的本机Windows方法?
好吧,我设法使事情顺利进行。 我已经将初始化设置为OnParentChanged
。 我知道它可能会不止一次被叫到,我得到了覆盖。
闻起来像是肮脏的骇客。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.