繁体   English   中英

紧凑框架中自定义控件中的设计时错误

[英]Design time error in custom control in compact framework

我正在为紧凑框架(VS2008,目标平台-Windows Mobile 6.1,C#)中的标准ListView控件编写扩展。

该类目前几乎是空的,只有一个方法重写(请参见下面的代码)。 我遇到的问题是:当我将控件放在至少具有ListViewItem的窗体上时,控件在设计时打开时无法初始化。

重现步骤:

  1. 创建一个智能设备类库项目。
  2. 添加一个新类ListViewEx : System.Windows.Forms.ListView
  3. 覆盖OnHandleCreated方法:

     protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); } 
  4. 将文件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 。)

  5. 生成项目。
  6. 在相同的解决方案中创建一个新的智能设备应用程序项目。
  7. 从工具箱中拖动Form1上的ListBoxEx
  8. 添加一列和一个带有任意文本的ListViewItem
  9. ListViewEx View属性设置为Details
  10. 保存,重建所有内容并关闭“表单设计器”选项卡。
  11. 重新打开表单设计器。

在这一点上,我希望看到其中包含一项的列表视图。 相反,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'对于'索引'无效。

参数名称:索引'

一些注意事项:

  1. 如果OnHandleCreated被删除,则控件将按预期工作。
  2. 当控件中没有任何项时,它不会失败。
  3. 该控件在运行时工作正常。

现在,我知道明显的解决方法是避免覆盖OnHandleCraeted 但是我想执行一些需要HWND句柄的本机Windows方法,作为初始化例程的一部分。 OnHandleCreated似乎是正确的选择。 (该控件失败,方法的主体中只有base.OnHandleCreated

所以问题是:有没有办法保持OnHandleCreated覆盖并使控件在设计时工作? 还是另一个:什么时候最好在哪里执行需要HWND句柄的本机Windows方法?

好吧,我设法使事情顺利进行。 我已经将初始化设置为OnParentChanged 我知道它可能会不止一次被叫到,我得到了覆盖。

闻起来像是肮脏的骇客。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM