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

时间:2014-09-24 16:46:57

标签: c# .net visual-studio-2008 compact-framework windows-mobile-6

我正在为紧凑框架(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. 从工具箱中拖动ListBoxEx上的Form1
  8. 使用任意文字添加一列和一个ListViewItem
  9. View的{​​{1}}属性设置为ListViewEx
  10. 保存,重建所有内容并关闭表单设计器选项卡。
  11. 重新打开表单设计器。
  12. 此时我希望看到我的列表视图中包含一个项目。相反,VS会抛出一个错误:

      

    控件Microsoft.CompactFramework.Design.HeaderControl已抛出   设计器中未处理的异常并已被禁用。

         

    例外:

         

    InvalidArgument ='-1'的值对'index'无效。   参数名称:index

         

    堆栈追踪:
      在Microsoft.CompactFramework.Design.HeaderControl.OnPaint(PaintEventArgs e)
      在Microsoft.CompactFramework.Design.HeaderControl.WndProc(Message&amp; m)

    当我按Details时,ListViewEx占位符看起来像the error text which is displayed in place of the normal control content

    此外,如果我将表格打开一段时间(约一分钟),VS也会抛出一个新错误:

      

    属性'Items'的代码生成失败。错误是:'InvalidArgument ='-1'的值对'index'无效。

         

    参数名称:index'

    一些注意事项:

    1. 如果删除OK,则控件按预期工作。
    2. 当没有任何项目时,控件无法初始化。
    3. 控件在运行时工作正常。
    4. 现在,我知道明显的解决方法是避免覆盖OnHandleCreated。但是我想执行一些需要HWND句柄的本机windows方法作为初始化例程的一部分。并且OnHandleCraeted似乎是正确的地方。 (控件失败,只在方法体中有OnHandleCreated

      所以问题是:有没有办法保持base.OnHandleCreated覆盖并使控件在设计时工作?或者另一个:何时何地最好执行需要HWND处理的本机窗口方法?

1 个答案:

答案 0 :(得分:2)

好吧,我设法使事情有效。我已将初始化设置为OnParentChanged。我知道它可能不止一次被召唤,我得到了覆盖。

虽然闻起来像一个肮脏的黑客。