0

Windows ハンドルの作成中にエラーが発生しました

「ウィンドウ ハンドルの作成中にエラーが発生しました」

これらのスレッドのほとんどで見られる一般的なコンセンサスは、私のアプリケーションがさまざまなコントロールを適切に処理していないということです。しかし、それは私には当てはまりません。

ここに画像の説明を入力

私の知る限り、これらの価値観はどれも異常に思えません。また、フォームを読み込もうとすると、このエラーが発生します。~28 ノードの DotNetBar AdvTree で構成されます。それらの 26 には 2 つのセルがあり、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)

答え:

カスタム コントロールには、ホストされたコントロール プロパティがあります。私が作成していたオブジェクトの順序は次のようになりました。

  1. ノードを作成する
  2. セルを作成する
  3. ホストされたコントロールを作成する
  4. セルのホストされたコントロール プロパティを手順 3 のコントロールに設定します。
  5. node.Cells コレクションにセルを追加します。
  6. ノードをツリーに追加します。

ステップ 4 では、セルには親がなかったので、基本的にそこにありました。私の推測では、ホストされたコントロールにもセルにも親がなかったため、これらのコントロールを適切に見つけることができませんでした。いずれにせよ、ホストされたコントロールの親をフォームに設定する必要がありました。これは私の問題を解決したようです:

Hosted Control ctrl.Parent = this;

4

1 に答える 1

0

カスタム コントロールには、ホストされたコントロール プロパティがあります。私が作成していたオブジェクトの順序は次のようになりました。

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;

于 2013-02-15T14:35:42.310 に答える