フォームに動的に読み込まれるテキストボックスを含むusercontrolがあります。 フォームの起動時に私はusercontrolを開始し、可視性タグを 'false'に設定します。 このメソッドは、ユーザーコントロールが可視になったときにメソッドを自動的にトリガーします。このメソッドはテキストボックスに出力を書き込むため、このメソッドはusercontrolとすべての継承コントロールがユーザーに表示された後にのみ実行します。
paintEventHandlerは、コントロールの可視性が変更された後に、フォームとその継承されたコントロールが再描画されたときにトリガーされる最後のイベントであると考えました。
したがって、paintEventHandlerを購読すると、フォームが完全に再描画された後にサブスクライブされたメソッドがトリガーされるはずですが、明らかにそうではありません。
これについてのご意見はありますか?usercontrolが完全に表示された後にメソッドを実行する方法
private void processControl_SetActive(object sender, CancelEventArgs e)
{
this.BeginInvoke((MethodInvoker)delegate
{
this.Paint += new PaintEventHandler(processControl_Paint);
});
}
void processControl_Paint(object sender, PaintEventArgs e)
{
//Should only be called when everything is fully loaded and visible on the form.
//Application.DoEvents() ->probably bad idea??
AddStuffToTextBox();
}
あなたはより高いレベルから何を達成しようとしていますか?たとえば、テキストボックスが表示されていないときにテキストボックスにテキストを追加するのは容認できないのですか?あなたが質問で概説したアプローチとは異なるアプローチを含むかもしれない実際の問題を解決しようとするのを手伝ってください。 – Eric
実際に問題はありません。しかし、テキストボックスにテキストを追加するときに、ユーザーが実際にテキストボックスを最初から塗りつぶすのを見ている間に、ある遅延を持つ行の後にテキストを追加するとよいでしょう。これで、フォームがロードされている間にテキストボックスに書き込まれた行が、処理が終了した直後に表示されるようになりました。 'visibleChanged'イベントに登録することは明らかにトリックを行いません。 「すべてのUIイベントの読み込みと処理が完了しました。あなたは今、フォームにコントロールを追加/使用できます」というイベントを探しています。 – Mez