4

Windowsフォームでは、UserControlまたはフォームが初めて表示されると、Loadイベントが発生します。

http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.load.aspx

チェックボックス、テキストボックス、ラベルなどのコントロールにそのようなイベントはありますか?

4

1 に答える 1

5

いいえ。HandleCreated イベントを使用できます。これは、コントロールのネイティブ ウィンドウが作成されたときに発生します。クラス コンストラクターが実行された後、信頼できる最初のイベント。親が Controls コレクションにコントロールを追加し、コントロールが表示されるとトリガーされます。

ただし、このイベントが複数回発生する可能性があることに注意してください。特定のプロパティが再割り当てされると、コントロールが再作成される場合があります。これは、ネイティブの CreateWindowEx() 関数を新しいスタイル フラグで呼び出す必要があるようなものです。したがって、少なくともこれを追跡する bool フラグを持ち歩く必要があります。

また、ネイティブ ウィンドウの作成後にコントロールのプロパティを設定するのは、かなり非効率的です。すべての Winforms コントロールは、ネイティブ ウィンドウが作成される前にプロパティを設定できるように設計されています。生成するコードが何であれ、ほぼ確実に代わりにクラス コンストラクターを使用する必要があります。派生コントロール自体のいずれか。または、親のコードで、InitializeComponent() がフォームまたはユーザー コントロールに対して行うのと同じように。

同じことが既存の Load イベントにも当てはまります。Load イベントが非常に重要であった VB6 のレガシーにより、過剰に使用される傾向があります。ただし、Winforms では、コントロールまたはフォームの最終的な場所とサイズに依存するコードにのみ必要です。フォームのスケーリングにより、デザイン プロパティとは異なる場合があります。その他のコードはコンストラクターに属します。

于 2012-11-05T15:11:39.977 に答える