DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Formが表示されたときに発生するイベント

環境/言語:[WindowsXP VB.NET )、.NET Framework1.1]
分類:[.NET]

はじめまして片山 浩二と言うものです。

早速ですがVB.NETのFormのイベントについてお聞きしたい事があります。
Formが表示されたとき(Active)になったときに一度だけ発生する
イベントなどは存在するのでしょうか?

Activatedと言うイベントが存在しますが、これはFormがActiveになっている時に
常に発生するイベントなので×です。
たとえば「Activatedイベントの中にIf文を設置し初回発生時のみ処理を行う」
といった方法も考えたのですが、どうもスマートではないので
ボツにしました。

現在、Form2からForm1に移動したときに一度だけ発生する処理を作成中です。

どなたか分かる方いらっしゃいましたらご教授の方よろしくお願い致します。
■No14032に返信(片山 浩二さんの記事)
> Activatedと言うイベントが存在しますが、これはFormがActiveになっている時に
> 常に発生するイベントなので×です。
> たとえば「Activatedイベントの中にIf文を設置し初回発生時のみ処理を行う」
> といった方法も考えたのですが、どうもスマートではないのでボツにしました。

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler Me.Activated, AddressOf Form1_Activated
    End Sub

    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs)
        RemoveHandler Me.Activated, AddressOf Form1_Activated

        MessageBox.Show("最初の 1 回だけ表示される!")
    End Sub

> Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
> AddHandler Me.Activated, AddressOf Form1_Activated
> End Sub
>
> Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs)
> RemoveHandler Me.Activated, AddressOf Form1_Activated
>
> MessageBox.Show("最初の 1 回だけ表示される!")
> End Sub


じゃんぬねっと様、早速のお返事ありがとうございます。

上記のプログラムですと
例えばForm1からForm2をモーダルで表示し、Form2を閉じた場合には
処理が発生しませんよね?

私の最初の説明が足りませんでした。申し訳ありません。

例えば、Form1からForm2をモーダルで表示し、Form2を閉じた場合に
「Form1がActiveになりましたよ!」と一度だけ表示させる
場合どのようなイベントに処理を書けばよいでしょうか?
> 例えば、Form1からForm2をモーダルで表示し、Form2を閉じた場合に
> 「Form1がActiveになりましたよ!」と一度だけ表示させる
> 場合どのようなイベントに処理を書けばよいでしょうか?

Form2.ShowDialog() から抜けてきた時に処理を実行するのではダメなんですか?
■No14032に返信(片山 浩二さんの記事)
> はじめまして片山 浩二と言うものです。
>
> 早速ですがVB.NETのFormのイベントについてお聞きしたい事があります。
> Formが表示されたとき(Active)になったときに一度だけ発生する
> イベントなどは存在するのでしょうか?
>
> Activatedと言うイベントが存在しますが、これはFormがActiveになっている時に
> 常に発生するイベントなので×です。
> たとえば「Activatedイベントの中にIf文を設置し初回発生時のみ処理を行う」
> といった方法も考えたのですが、どうもスマートではないので
> ボツにしました。
>
> 現在、Form2からForm1に移動したときに一度だけ発生する処理を作成中です。
>
> どなたか分かる方いらっしゃいましたらご教授の方よろしくお願い致します。
>
>

Form1に戻る前のフォームでフラグを立てておくのはどうでしょう? 何かのたびにフォームはアクティブのイベントが発生するので、各種のダイアログからの設定変更後Form1に戻るのであれば、そのフラグがたっていた場合にのみフォームがアクティブになった時の処理をするという方法です。
IF文やSELECT文も使います。
■No14035に返信(渋木宏明(ひどり)さんの記事)
>>例えば、Form1からForm2をモーダルで表示し、Form2を閉じた場合に
>>「Form1がActiveになりましたよ!」と一度だけ表示させる
>>場合どのようなイベントに処理を書けばよいでしょうか?
>
> Form2.ShowDialog() から抜けてきた時に処理を実行するのではダメなんですか?
>

渋木宏明様、お返事ありがとうございます。

Form2.ShowDialog() から抜けてきた時に
発生するイベントが存在するのでしょうか?

もし存在するのであれば教えていただきたく思います。
> Form2.ShowDialog() から抜けてきた時に
> 発生するイベントが存在するのでしょうか?

まずはShowとShowDialogについて違いを理解してください。
ShowおよびShowDialogの次にMessageBox.Show("Form2 Closed.")と記述して見るとよくわかると思います。
■No14043に返信(まどかさんの記事)
>>Form2.ShowDialog() から抜けてきた時に
>>発生するイベントが存在するのでしょうか?
>
> まずはShowとShowDialogについて違いを理解してください。
> ShowおよびShowDialogの次にMessageBox.Show("Form2 Closed.")と記述して見るとよくわかると思います。
>
>

まどか様お返事ありがとうございます。

ようやく理解できました。ものすごく単純な事なんですね。

show はFormを呼び出した後も呼び出し元の処理は続き
ShowDialog だと、呼び出したFormがCloseされるまで
ShowDialogを書いた所で止まっているというイメージですよね。

ありがとうございました。
■No14036に返信(ひろしさんの記事)
> ■No14032に返信(片山 浩二さんの記事)
>>はじめまして片山 浩二と言うものです。
>>
>>早速ですがVB.NETのFormのイベントについてお聞きしたい事があります。
>>Formが表示されたとき(Active)になったときに一度だけ発生する
>>イベントなどは存在するのでしょうか?
>>
>>Activatedと言うイベントが存在しますが、これはFormがActiveになっている時に
>>常に発生するイベントなので×です。
>>たとえば「Activatedイベントの中にIf文を設置し初回発生時のみ処理を行う」
>>といった方法も考えたのですが、どうもスマートではないので
>>ボツにしました。
>>
>>現在、Form2からForm1に移動したときに一度だけ発生する処理を作成中です。
>>
>>どなたか分かる方いらっしゃいましたらご教授の方よろしくお願い致します。
>>
>>
>
> Form1に戻る前のフォームでフラグを立てておくのはどうでしょう? 何かのたびにフォームはアクティブのイベントが発生するので、各種のダイアログからの設定変更後Form1に戻るのであれば、そのフラグがたっていた場合にのみフォームがアクティブになった時の処理をするという方法です。
> IF文やSELECT文も使います。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板