これらのスレッドのほとんどで見られる一般的なコンセンサスは、私のアプリケーションがさまざまなコントロールを適切に処理していないということです。しかし、それは私には当てはまりません。
私の知る限り、これらの価値観はどれも異常に思えません。また、フォームを読み込もうとすると、このエラーが発生します。~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)
答え:
カスタム コントロールには、ホストされたコントロール プロパティがあります。私が作成していたオブジェクトの順序は次のようになりました。
- ノードを作成する
- セルを作成する
- ホストされたコントロールを作成する
- セルのホストされたコントロール プロパティを手順 3 のコントロールに設定します。
- node.Cells コレクションにセルを追加します。
- ノードをツリーに追加します。
ステップ 4 では、セルには親がなかったので、基本的にそこにありました。私の推測では、ホストされたコントロールにもセルにも親がなかったため、これらのコントロールを適切に見つけることができませんでした。いずれにせよ、ホストされたコントロールの親をフォームに設定する必要がありました。これは私の問題を解決したようです:
Hosted Control ctrl.Parent = this;