创建窗口句柄#2时出错

时间:2013-02-14 17:13:05

标签: c# winforms

Error in creating windows handle

"Error Creating Window Handle"

在大多数这些主题中发现的普遍共识是我的应用程序没有正确处理各种控件。但是,对我来说情况并非如此。

enter image description here

据我所知,这些价值观中没有一个看起来与众不同。此外,我尝试加载表单时收到此错误。它由一个带有~28个节点的DotNetBar AdvTree组成。其中26个有2个单元格,第二个单元格有一个使用DotNetBar TextBoxX的托管控件。 如果我加载的节点数量较少,则错误就会消失。

我错过了什么吗?我很确定处理对象不是问题,因为我在加载表单时遇到了这个问题。

这是堆栈跟踪:

System.ComponentModel.Win32Exception (0x80004005): Error creating window handle.
   at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
   at System.Windows.Forms.Control.CreateHandle()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.ControlCollection.Add(Control value)
   at DevComponents.AdvTree.AdvTree.Ú›()
   at DevComponents.AdvTree.AdvTree.Ú“(Rectangle Ú‘, Rectangle Ú’)
   at DevComponents.AdvTree.AdvTree.Ú()
   at DevComponents.AdvTree.AdvTree.RecalcLayout()
   at DevComponents.AdvTree.Node.OnDisplayChanged()
   at DevComponents.AdvTree.Cell.OnSizeChanged()
   at DevComponents.AdvTree.Cell.HostedControlSizedChanged(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnSizeChanged(EventArgs e)
   at System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
   at System.Windows.Forms.Control.UpdateBounds()
   at System.Windows.Forms.Control.WmCreate(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
   at System.Windows.Forms.TextBox.WndProc(Message& m)
   at DevComponents.DotNetBar.Controls.TextBoxX.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

答案:

使用自定义控件,有一个Hosted Control属性。我创建的对象的顺序是这样的:

  1. 创建节点
  2. 创建单元格
  3. 创建托管控件
  4. 在步骤3中将单元格的托管控件属性设置为控件。
  5. 将单元格添加到node.Cells集合
  6. 将节点添加到树中。
  7. 由于在步骤4中,单元格没有父级,因此它基本上就在那里。我的推测是,托管控件和单元都没有父级,因此无法正确定位这些控件。无论哪种方式,我都需要将托管控件的父级设置为表单。这似乎解决了我的问题:

    Hosted Control ctrl.Parent = this;

1 个答案:

答案 0 :(得分:0)

使用自定义控件,有一个Hosted Control属性。我创建的对象的顺序是这样的:

1. Create a node
2. Create a cell
3. Create the hosted control
4. Set the cell's hosted control property to the control in step 3.
5. Add the cell to the node.Cells collection
6. Add the node to the tree.

由于在步骤4中,单元格没有父级,因此它基本上就在那里。我的推测是,托管控件和单元都没有父级,因此无法正确定位这些控件。无论哪种方式,我都需要将托管控件的父级设置为表单。这似乎解决了我的问题:

托管控制ctrl.Parent = this;