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

各フォームの先頭で自動実行するには?

環境/言語:[(Windows XP]
分類:[.NET]

各フォームを開いたときに、色々な設定や画面表示など自動で実行・設定しておきたいときがあるのですが、何か方法はないでしょうか。
よろしくお願いします。
こんにちは、ふろふろさん。

■No6404に返信(ふろふろさんの記事)
> 各フォームを開いたときに、色々な設定や画面表示など自動で実行・設定しておきたいときがあるのですが、何か方法はないでしょうか。
> よろしくお願いします。

「各フォームを開いたとき」までの「イベント」で対応しては何か不都合なのですか?
また、設定元はどこから拾ってくるかにも因りますよね?
きいぼーです。

> 各フォームを開いたときに、色々な設定や画面表示など自動で実行・設定しておきたいときがあるのですが、何か方法はないでしょうか。
各フォーム共通で、ということでしょうか?
プロパティなら、
http://dobon.net/vb/dotnet/programing/dynamicproperties.html
を参考にされ、DynamicPropertiesを使用されたらどうでしょう。

その他の動作なら、基本のFormクラスを作成し、
各Formは、作成した基本Formを継承して作成する方法はどうでしょう?
みなさんこんにちは。

設定したい内容にもよると思いますが、
java.lang.Nullpo さんのおっしゃるとおり、
「各フォームを開いたとき」までの「イベント」
でなんとかできると思いますよ。

Loadのイベントじゃダメなんでしょうか?
Loadの前の段階ということであれば、
ShowDialogを下記のようにすれば、
設定できると思います。

フォームの呼び出し元から引数を渡したい場合も、
この関数に引数を渡せばできます。

Public Shadows Sub ShowDialog()
'' 表示前にやりたいこと

MyBase.ShowDialog()
End Sub
2004/09/30(Thu) 11:48:41 編集(投稿者)

みなさん、こんにちは。
SHさん、言葉足らずの私のフォローをいつもありがとうございます。

■No6411に返信(SHさんの記事)
> Loadのイベントじゃダメなんでしょうか?
> Loadの前の段階ということであれば、
> ShowDialogを下記のようにすれば、
> 設定できると思います。

SHさんのShowDialogをShadowsして割り込む方法を使用する場合は、
あまりないかと思いますけど、非表示にしてから再表示にした時のことを考慮して
(また初期化されてもいい場合は、この限りでないですけども)
パラメータ以外に、それなりにフラグを設けると使いやすいですね。

そういう意味ではコンストラクタに渡す引数でも良いかと思います。
Formに属するControlの初期化が終わった後で処理すればよいですね。

Public Sub New(ByVal uParameter As EnumParameter)
  MyBase.New()
  MyClass.InitializeComponent()
  ' TODO:ここで、パラメータを解析して初期化するメソッドを追加
End Sub

これなら、強制させることも可能ですので安全ですね。
また、基底クラス扱いにした時も大丈夫ですね。

またはそういった初期化メソッドを呼ぶようにすればいいでしょうが、
(インターフェイスを考えても)あまり確実でないですね。
■No6413に返信(java.lang.Nullpoさんの記事)
> 2004/09/30(Thu) 11:48:41 編集(投稿者)
>
> みなさん、こんにちは。
> SHさん、言葉足らずの私のフォローをいつもありがとうございます。
>
> ■No6411に返信(SHさんの記事)
>>Loadのイベントじゃダメなんでしょうか?
>>Loadの前の段階ということであれば、
>>ShowDialogを下記のようにすれば、
>>設定できると思います。
>
> SHさんのShowDialogをShadowsして割り込む方法を使用する場合は、
> あまりないかと思いますけど、非表示にしてから再表示にした時のことを考慮して
> (また初期化されてもいい場合は、この限りでないですけども)
> パラメータ以外に、それなりにフラグを設けると使いやすいですね。
>
> そういう意味ではコンストラクタに渡す引数でも良いかと思います。
> Formに属するControlの初期化が終わった後で処理すればよいですね。
>
> Public Sub New(ByVal uParameter As EnumParameter)
>   MyBase.New()
>   MyClass.InitializeComponent()
>   ' TODO:ここで、パラメータを解析して初期化するメソッドを追加
> End Sub
>
> これなら、強制させることも可能ですので安全ですね。
> また、基底クラス扱いにした時も大丈夫ですね。
>
> またはそういった初期化メソッドを呼ぶようにすればいいでしょうが、
> (インターフェイスを考えても)あまり確実でないですね。

たくさんの、ご指導ありがとうございます。
.NETもまだ初心者の段階でうまく説明できず申し訳ありません。
要は、やりたいことは各フォームに移動したとき何かのボタンを押さなくとも
実行しておきたいことがあると思うのですが・・・
例えば、私はセキュリティ関係のシステムを作っていますが、カメラモードの
フォームを開けば、ボタンを押さなくとも自動的にそのサブルーチンをCALL
してカメラをスタートさせておきたいのです。
このような各フォームでの立ち上がり直後の自動実行の必要性はあると思うのですが、何故そのようなコマンドが用意されていないのでしょうか?

java.lang.Nullpo さんの
「各フォームを開いたとき」までの「イベント」で対応しては何か不都合なのですか?
また、設定元はどこから拾ってくるかにも因りますよね?

とは(各フォームを開いたとき」までの「イベント」で対応)とは
具体的にどうすればいいのでしょか?
実行したい内容は、SUBルーチンですでに動作確認済みです。
ただ一々ボタンを押して実行するのではなく、フォームを開いた直後にそのSUBルーチンを自動で実行させたいだけなのですが・・・
また、設定元はどこから拾ってくるか の意味も分かりません。
必要な処理は全てSUBルーチンに記述してあります。
それともこのように強制的に実行さすとなにか不具合な事が起こるのでしょうか?
このあたりが良く分かりません。

SHさんの
Public Shadows Sub ShowDialog()
'' 表示前にやりたいこと

MyBase.ShowDialog()
End Sub
はTESTしてみましたが、全く問題なく目的を達成できました
ありがとうございます。
ただ、java.lang.Nullpo さんの内容をみると、少し心配でTESTしてみましたが、Public Sub New(ByVal uParameter As EnumParameter)のEnumParameter部分がエラーになり具体的にどのように設定・記述していいのか分かりません。
もう少しご教示いただければ、ありがたいのですが。
■No6425に返信(ふろふろさんの記事)
> 要は、やりたいことは各フォームに移動したとき何かのボタンを押さなくとも
> 実行しておきたいことがあると思うのですが・・・
> 例えば、私はセキュリティ関係のシステムを作っていますが、カメラモードの
> フォームを開けば、ボタンを押さなくとも自動的にそのサブルーチンをCALL
> してカメラをスタートさせておきたいのです。
> このような各フォームでの立ち上がり直後の自動実行の必要性はあると思うのですが、何故そのようなコマンドが用意されていないのでしょうか?

いや、用意されてはいるのですが、タイミングの問題なのではないでしょうか?
既存のイベントで対応できるのか、そうでないのか...
そういう意味では、厳密にどのタイミングなのかを明記して質問すべきだったかもしれませんね。

> とは(各フォームを開いたとき」までの「イベント」で対応)とは
> 具体的にどうすればいいのでしょか?

 コンストラクタ:そのFormのインスタンスを生成した時点で自動実行したい
 Load()イベント:そのFormがロードされた時に自動実行したい
 ShowDialog()メソッド:そのFormが表示された時に自動実行したい

特殊なタイミングであれば、自作のメソッドを作ってそこで処理を行う方が判りやすいです。
今回の場合、その自作メソッドでふろふろさんの言う「SUBルーチン」を呼べば良いのでは?

> SHさんの
> Public Shadows Sub ShowDialog()
>   ' 表示前にやりたいこと
>   MyBase.ShowDialog()
> End Sub
> はTESTしてみましたが、全く問題なく目的を達成できました
> ありがとうございます。

今回はどうやら、Showした際に実行させたかったようですね。
それならばSHさんの方法で良いかと思います。

> ただ、java.lang.Nullpo さんの内容をみると、少し心配でTESTしてみましたが、

いえ、

>  各フォームを開いたときに、色々な設定や画面表示など自動で実行・設定

と質問されていたものですから、表示される度に初期化を行って良い仕様でないのならば
それなりにフラグを設けるか、コンストラクタ時に1度だけやるかをお勧めするという意味です。

> EnumParameter部分がエラーになり具体的にどのように設定・記述していいのか分かりません。

Enumとプリフィクスがついているのはお気づきでしょうか?
EnumParameterとは私が勝手に記した列挙型です。
今回パラメータを渡すのならそれなりに自作で、

    Public Enum EnumParameter
        ManageMode = 1
        CameraMode = 2
        PreviewMode = 4
        DebugMode = 8
    End Enum

と、定義しておくと後で意味がわかりやすいと思ったものですから...

結論を言いますと、ShowDialog()時に毎回「初期化」をする仕様ならば、
SHさんのやり方が1番適しているのではないかと言うことです。
■No6427に返信(java.lang.Nullpoさんの記事)
> ■No6425に返信(ふろふろさんの記事)
>>要は、やりたいことは各フォームに移動したとき何かのボタンを押さなくとも
>>実行しておきたいことがあると思うのですが・・・
>>例えば、私はセキュリティ関係のシステムを作っていますが、カメラモードの
>>フォームを開けば、ボタンを押さなくとも自動的にそのサブルーチンをCALL
>>してカメラをスタートさせておきたいのです。
>>このような各フォームでの立ち上がり直後の自動実行の必要性はあると思うのですが、何故そのようなコマンドが用意されていないのでしょうか?
>
> いや、用意されてはいるのですが、タイミングの問題なのではないでしょうか?
> 既存のイベントで対応できるのか、そうでないのか...
> そういう意味では、厳密にどのタイミングなのかを明記して質問すべきだったかもしれませんね。
>
>>とは(各フォームを開いたとき」までの「イベント」で対応)とは
>>具体的にどうすればいいのでしょか?
>
>  コンストラクタ:そのFormのインスタンスを生成した時点で自動実行したい
>  Load()イベント:そのFormがロードされた時に自動実行したい
>  ShowDialog()メソッド:そのFormが表示された時に自動実行したい
>
> 特殊なタイミングであれば、自作のメソッドを作ってそこで処理を行う方が判りやすいです。
> 今回の場合、その自作メソッドでふろふろさんの言う「SUBルーチン」を呼べば良いのでは?
>
>>SHさんの
>>Public Shadows Sub ShowDialog()
>>  ' 表示前にやりたいこと
>>  MyBase.ShowDialog()
>>End Sub
>>はTESTしてみましたが、全く問題なく目的を達成できました
>>ありがとうございます。
>
> 今回はどうやら、Showした際に実行させたかったようですね。
> それならばSHさんの方法で良いかと思います。
>
>>ただ、java.lang.Nullpo さんの内容をみると、少し心配でTESTしてみましたが、
>
> いえ、
>
>> 各フォームを開いたときに、色々な設定や画面表示など自動で実行・設定
>
> と質問されていたものですから、表示される度に初期化を行って良い仕様でないのならば
> それなりにフラグを設けるか、コンストラクタ時に1度だけやるかをお勧めするという意味です。
>
>>EnumParameter部分がエラーになり具体的にどのように設定・記述していいのか分かりません。
>
> Enumとプリフィクスがついているのはお気づきでしょうか?
> EnumParameterとは私が勝手に記した列挙型です。
> 今回パラメータを渡すのならそれなりに自作で、
>
> Public Enum EnumParameter
> ManageMode = 1
> CameraMode = 2
> PreviewMode = 4
> DebugMode = 8
> End Enum
>
> と、定義しておくと後で意味がわかりやすいと思ったものですから...
>
> 結論を言いますと、ShowDialog()時に毎回「初期化」をする仕様ならば、
> SHさんのやり方が1番適しているのではないかと言うことです。

java.lang.Nullpo さん 早速のご返事ありがとうございました。
やはり 私の質問がいまひとつ意味不明で申し訳ございませんでした。
よく分かりました。
まだ.うろ覚えで荷の重すぎるシステムに挑戦しているものですから、質問も中々当を得ず、過去にもせっかくいいご指導を受けながら生かせなかったこともあり反省しております。
ただ自動実行といっても、色々なケースあるのですね
私の場合は、
「ShowDialog()メソッド:そのFormが表示された時に自動実行したい」
ですね、このタイミングにより、方法も変化するわけですね。
これで安心して、SHさんの方法でやっていきます。
でも、おかげ様でここでご指導いただきながらシステムもほぼ完成致しました。

今後ともよろしく、お願い申し上げます。
解決済み!

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