2016-11-30 10 views
0

フォームイベントに相当するパネルのイベントはありますか? 私は決して閉じられないフォームの中でいくつかのいくつかのパネルを切り替えました。 しかし、私はフォームの中で使われているShownのようなイベントの近くに何かを見つけることができませんでした。 私が持っていた閉鎖はPaintイベントです。しかし、私はパネルが表示されるたびに一度更新したいだけです。C#Winformパネル表示されたイベント

+0

フォームが表示されるのは初めてフォームが表示されます。それは決して再び起こされません。したがって、任意のコントロールの場合、HandleCreatedのようなものを使用し、OnCreateControl()メソッドをオーバーライドしてコードを追加できます。しかし、Form.Shownが実際とは少し違って動作すると思うようですね... –

+0

どのようにパネルを表示していますか?いくつかのコードを入力すると役立ちます。 – djv

+0

フォーカスイベントで何が問題になっていますか?それは焦点が合っていないと思われますか? – user1274820

答えて

0

あなたはVisibleChangedイベントで聴くことができ、visibility = trueのときだけ動作します。

https://msdn.microsoft.com/en-us/library/system.windows.forms.panel_events%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

また、これらは、あなたが望む結果を与えるかどうかを確認するためにEnterInvalidatedイベントを試すことができます。

また、放置してパネルを無効にすると、ツールボックスでEnabledChangedイベントを使用できる場合があります。

+0

私の場合は可視です。私はサブパネルのコンテナとしてメインパネルを持っていました。ランタイム中、メインパネルのコントロールはクリアされ、サブパネルは追加されました。サブパネルはアンロード時に破棄されません。 – ishtarsg

0

Form.Shownは、フォームが表示されるたびに発生しません。むしろOccurs whenever the form is first displayedです。これは、Panel.Shownイベントはなく、「パネルが最初に表示されるたびに」発生するイベントはありません。

Panel.Paintイベントでこの動作をシミュレートすることができます。これは、前に一度「表示」されたかどうかを確認するフラグを使用します。これにより、それはForm.Shownのように振る舞います。

private bool panel1Painted = false; 
private void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    if (!panel1Painted) 
    { 
     // do your shown stuff here 
     panel1Painted = true; 
    } 
} 

Form.Shownの精神で維持するには、パネルが を再構築している場合にはフラグをリセットしたいことがあります。これは、 と表示されていると同じではありません。

+0

パネル自体が破壊されず、同じパネルの別のインスタンスが存在する可能性があるため、パネル1の変更は、その後、同じインスタンスのパネル2に反映されないことがあります。 – ishtarsg

+0

各パネルに異なるフラグを使用します。私はそれが明らかだと思った。 – djv

+0

@CodyGray「ペイントイベントは*ロット*がトリガーされます」という言い方は真実ではありません(もちろん、*ロット*の定義に応じて、パネルが表示されるたびに*ロット*ですか? 。たぶんあなたはそれをテストし、あなたの発見を報告することができます。プラス 'if(!panel1Painted)'は、パネルが表示されたときに評価するのに費用がかかりません。あなたもこれをテストできますか? – djv

関連する問題