ベストアンサー C#FormのLoadイベントについて 2009/02/01 22:44 C#FormのLoadイベントのタイミングは、ウィンドウプロシージャで受け取るWM_XXXXのメッセージで表すと、どのメッセージに該当するのでしょうか。 みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー redfox63 ベストアンサー率71% (1325/1856) 2009/02/02 00:16 回答No.1 強いてあげるなら WM_SHOWWINDOW でしょうか Form_Loadの { にブレークポイントを設定して 呼び出し履歴で確認すると グレーの文字で9行ほど手前にあります 質問者 お礼 2009/02/02 01:06 回答ありがとうございます。 >Form_Loadの { にブレークポイントを設定して >呼び出し履歴で確認すると グレーの文字で9行ほど手前にあります 確かにWM_SHOWWINDOWのようですね。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 関連するQ&A VB6でForm_Load中にイベントを発生させない方法 VB6でForm_Loadにオプションボタンの選択を変更するとオプションボタンのクリックイベント(選択変更)が動作してしまいます。 Form_Loadの初期表示の設定をしているときは、オプションボタンのイベントを無効にしたいのですがどのようにしたら良いでしょうか? RemoveHandler等の処理があるみたいですが良く分かりません。 良い方法を教えてください。 宜しくお願いします。。 Form_Load と Form_Activate のタイミング あるデータ入力アプリを作っています。 親フォーム(Form0)で番号を決め、子フォーム(Form1,Form2,Form3,Form4) でデータ入力し、それぞれの子フォームを出るとき(Unload Me) に、変数にsaveしています。それを親フォーム(Form0)で登録を選択したとき、入力データをチェックしてDBに格納しています。 すでにDB格納済のデータの場合、親フォームでDBから変数に読み込み、子フォームのForm_Loadで展開しています。 そこで困っているのは、親と子のフォームを行き来するときにデータの表示で前のが残っていたり、消えてしまったりします。 Form_LoadとForm_Activateを通過するタイミングが、ちゃんと理解できていないためコードの記述位置が不適切なのだと思います。 Form_Load と Form_Activate の実行タイミングについて、お教えください。 Form1_Loadイベントのコードよりプロパティが優先? vb2005です。 フォーム1にDataGridView1を設置し、アクセスのテーブルにバインドしています。 デザインのプロパティでは「30」、 コードの Form1_Loadイベントには Me.DataGridView1.RowTemplate.Height = 15 として実行すると、 最初は30の行の高さで表示され、 フィールド部分をクリックして並べ替えると、 15になります。 Form1_Loadイベントに、 MsgBox(Me.DataGridView1.RowTemplate.Height) Me.DataGridView1.RowTemplate.Height = 15 MsgBox(Me.DataGridView1.RowTemplate.Height) としてみたら、 「30」→「15」となりました。 と言うことは、フォーム表示時には15にならなければいけないのに、30の高さで表示されます。 どういうことなのでしょうか? よろしくお願いします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム C# MainForm_Load エラーで終了には C#を勉強中です。 Windowsフォームアプリケーションで、 MainForm_Load() 内でエラーが起こったためプログラムを終了したい場合、 例えば、なにか動作環境を定義した設定ファイルがあって、 その内容を読み込んで動作したい場合で、 MainForm_Load()内でその読み込みを行っているが、 ファイルがないなどで失敗したため処理を終わらせたい場合、 MainForm_Load() 内で Environment.Exit() としていいものでしょうか? そもそも MainForm_Load() 内でこういった初期処理をしてもいいものでしょうか? Shown ですべき? というのも、むかーし、ほんの少しだけ MFC VC++ をかじったことがあって、 そのときは、初期エラーで処理を終了させたい場合、 WM_CLOSE ウィンドウメッセージを Post してたような記憶があるもので...。 なんか、MainForm_Load() を途中で終了させてしまっていいのだろうか、と思った次第です。 よろしくお願いします。 C# のイベントって C#を勉強中の者です。 むかし MFC VC++ を少しだけかじったことがありまして、 その中で、ウィンドウメッセージというものをよく利用していました。 C#ではイベントというものをよく利用するようですが、 これは MFC C++ でいうところのウィンドウメッセージと同じようなものでしょうか。 つまり、イベントというのは、メッセージキューにためられたメッセージが処理される際に呼ばれるものなのでしょうか。 仮にそうだとすると、イベントを発行するというのは、ウィンドウメッセージを送るのと同じようなものでしょうか。 ウィンドウハンドルとかないし、違うような気がしますね...。 でも、割り込みというのとは違いますよね...? 入門書は読んだんですが(いくつも読んだわけではないのですが...)、 使い方は書いてあってなんとなく理解はできた一方、 仕組み的なところがしっくりきません。 分かりやすい説明をいただけるとうれしいです。 よろしくお願いします。 フォームを開く時のイベント処理 Visual Basic 6.0 あるフォーム読込時イベント[Private Sub Form_Load()]で コマンドボタンにフォーカスを移動しようとしたら、エラーしてしましました。 Private Sub Form_Load() CommandButton.SetFocus ’プロシージャの呼び出し、または引数が不正です End Sub Form_Open や BeforeUpdate ? 開いた後にフォーカスをセット出来る イベント処理は無いでしょうか? ご教授願います。 Form_LoadでDB接続ではなく、Form_Load完了でDB接続したい VB.NETです。 現在、Form_LoadにDB接続のコードを記述していますが、Form_Load完了後に、DB接続の命令を実行することはできますでしょうか? つまり、Form_Loadが完了したら、DB接続のコードが実行されるようにしたいのです。 理由は、DB接続に時間がかかる場合、Form_Loadによる画面がなかなか出てこない。 また、DB接続エラーとなった場合、Form_Loadによる画面が出る前に、エラーメッセージがポップアップされてしまう。 これらを回避したいのです。 良い方法ご存知の方がいましたら、ご教授下さいませ。 よろしくお願い致します。 Loadイベント中にほかのイベントを発生したくない VisualC# .net です。 フォームを表示する場合に コンストラクタが呼ばれその後ロードイベントで フォームのコントロールの初期設定を行っています。 (この方法がまちがっている?) ロードイベント内でコンボボックスの初期設定を行うと コンボボックスのイベントが発生してしまいます。 以下参照にて このイベントでメッセージを表示しているのですが 初期設定では出てほしくありません。 そこで、 これを防ぐためには以下のようにフラグを立てるような 方法しかないのでしょうか? それともDebugger.IsAttached のようなものが 用意されているのでしょうか public bool iload = false; (←仮フラグを追加) private void Form1_Load(object sender, EventArgs e) { iload = true; (←仮フラグを登録) ComboBox1.SeletedIndex = 0; iload = false; (←仮フラグを削除) } private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (iload) return; (←仮フラグ登録時はなにもしない) MessageBox.Show("変更しました"); } VB.net(2005)でFormのLoadイベント処理について質問で VB.net(2005)でFormのLoadイベント処理について質問です 設定時刻として9:00とします。 formを起動した時刻が9時前ならまで何もせず。 9時以降になれば処理を開始する。 といったプログラムを作成しようと思います。 サンプル) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim settingtime As DateTime '現在時刻を設定 Dim nowtime As DateTime = System.DateTime.Now.ToShortTimeString '設定時間を9時 settingtime DateTime = DateTime.Parse("9:00").ToShortTimeString '現在時刻が9時より後のとき If nowtime < setting Then 処理A Else '現在時刻が9時より前のとき 9時まで処理Aをしない(9時になれば処理Aを開始) End If End Sub 上記のようにコーティングしましたが、 呼び出した時が9時以降なら処理Aをして以前ならElseの処理を行い抜けてしまいます。 9時になれば処理をAをしたいのです。 formを呼び出しにTimerのTickイベントで9時になれば処理Aを開始? なにかいい案があればよろしくお願いします。 モーダルダイアログで発生するイベント(C#) C#で、FormをShowDialog()、つまりモーダルダイアログで表示してからの話です。 ここで、当のForm以外をマウスでクリックしたりすると、当のFormのタイトルバーがチカチカしますよね。 このとき、当のFormにはどんなイベントが発生しているのでしょうか? 当のForm以外をクリックしたときに、「ダイアログのボタンを押して、値を選択してください」のようなメッセージを出したいと思っています。 そのために、そのイベントを使えばいいのかな、と思いました。 どうぞ、よろしくお願いします。 【C#】Form1からForm2を表示したとき、Form2がForm1 【C#】Form1からForm2を表示したとき、Form2がForm1を所有する 検索しても見つからなかったので質問させていただきます。 Form1からForm2を表示(Form2.Instance.Show();)したとき、 Form2がForm1の上にこないように、また、Form2は必ずForm1のすぐ後ろであるようにして欲しいんです。 たとえば、 IEで検索ウィンドウを開いたときに、検索ウィンドウを表示していてもIEは操作できるけど(モードレス)、IEの後ろに検索ウィンドウが行くことはありません。 これはForm2.Instance.Show(this);とすればいいだけですが、 自分がやりたいのはその逆です。 検索ウィンドウの後ろにIEが行くことがないようにしたいんです。 Form1.Activateなどを使って無理やりさせようとしましたが、 無理だったので質問しました。 わかる方は教えていただけると嬉しいです。 お願いします。 (ちなみにVisualStudio2010、.NET Framework3.5です。) Form間の値の渡し方 1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。 実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。 因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム C#のフォーム間のイベント駆動 C#悩んでおります。初心者です。 Form1とForm2があります。 Form1にはピクチャボックスが二つ並んでいて。 Form2にはチェックボックスが二つ並んでいます。 Form2のチェックボックスをオン-オフすると、それぞれのピクチャーのイメージを変更したいのですが、 なにせ、Form2の状況をForm1に知らせる方法がわかりません。 なにやら、デリゲートとイベントを使ってForm1に知らせるらしい、ということまではわかったのですが、具体的にどうやるのかわかりません。 いろいろネットで調べてはいるのですが、Form1,2が分かれていない例や、静的変数を使った例が多く、だめです。 静的だとイベントが発生しないので、イメージを更新するタイミングが無いですし、Form1,2が分かれていない場合を無理やりに分かれて記述すると、必ず記述のエラーが出ます。 どうすればいいのでしょうか? C#でFormオブジェクトのイベントについて C#において Formオブジェクトに付加したコントロールのMouseWheelイベントについて質問です。 ある特定のコントロールにMouseWheelイベントを付加してホイールボタンの動きをつけたのですが、どうも特定のコントロールだけでなく、Formオブジェクト全体にWheelのイベントが付加されてしまっているようです。以下のコードがそれです。 using System; using System.Windows.Forms; using System.IO; using System.Drawing; //実行クラス public class MainClass{ //実行メソッド public static void Main(string [] args){ NewForm formObj =new NewForm(); formObj.SetLabel(); Application.EnableVisualStyles(); Application.Run(formObj); } } //テスト用Form拡張クラス public class NewForm :Form{ public Label labelObj; public NewForm(){ this.Width = 600; this.Height = 600; this.Text ="wheel test"; } public void SetLabel(){ this.labelObj =new Label(); this.labelObj.Width=200; this.labelObj.Height =50; this.labelObj.Location = new Point(10,10); this.labelObj.Text ="ホイールのテスト"; this.labelObj.BackColor =Color.Red; this.Controls.Add(this.labelObj); //delegate this.labelObj.MouseEnter += new EventHandler(this.EnterMethod); this.labelObj.MouseWheel += new MouseEventHandler(this.WheelMethod); } //コントロールに追加したラベルにフォーカスした時のメソッド public void EnterMethod(Object sender,EventArgs e){ this.labelObj.Focus(); } public void WheelMethod(Object sender,MouseEventArgs e){ MessageBox.Show(e.Delta.ToString()); } } 上記のコードだと、どうしても横幅200縦50のラベルコントロールの外側でもそのWheelイベントが 発生してしまうようです。 これを回避するために無理やり以下のようにソースを改変しました。 public void WheelMethod(Object sender,MouseEventArgs e){ //ディスプレイ基準ではなく、Formオブジェクト基準の座標の取得 Point tempObj = this.labelObj.PointToClient(Cursor.Position); int tempX = tempObj.X; int tempY =tempObj.Y; if ( (tempX > 0) && (tempX < this.labelObj.Width) && (tempY > 0) && (tempY < this.labelObj.Height) ){ MessageBox.Show(tempObj.X.ToString()); MessageBox.Show(tempObj.Y.ToString()); MessageBox.Show(e.Delta.ToString()); } } マウスカーソルの位置が、特定のラベルの範囲内でのみ動くようにしたのですが これのやりかたがベターというかC#上では定石なのでしょうか? そもそも、なぜラベルコントロールに対してMouseWheelイベントをつけているのに ラベルのある座標以外で、Wheelイベントが発生してしまうのでしょうか? よろしくご教授ください。 ちなみにC#の質問ってこのASPの項目でもいいんですかね? C,C++とは色が違うし、 そのほかのプログラミングのほうがよいのでしょうか? Formロード時に生成するインスタンスを、他のイベント内でも共有したい。 下記手順を踏んで作成したオブジェクトを、タイトルの通り他のイベント内でも共有したいと考えています。 1. Formロード時に、xmlファイルから400項目程度の内容を読み込む。 2. 1.で読み込んだ各内容を、クラスのフィールドに設定します。 このようにLoadイベントで生成したクラスを、他のイベント、例えば、Form画面に設定してあるボタンのクリック時にも使いたいのです。 このようなケースで、どのような方法を採るとよいでしょうか? 【この質問に関係はないかもしれませんが、 言語は、C#を使っています。】 vb.netでForm_Loadの終了判定について vb.netのWindowsApplicationでForm_Loadの終了判定ってどうやっていますか? Visual Studio 2015 visual Basic .net TextChangedイベントなどが、Form_Loadの前に走って 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 になってしまいがちですが、 これを回避するために、とりあえず下記の対応をしましたが、 スイッチをONにするハンドルはMyBase.Loadで良かったのか、 普通はどうするのか、 などをご教授ください。 <暫定対応> Dim SW_FormLoad As Boolean Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 処理 : SW_FormLoad = True End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged If Not SW_FormLoad Then Return 処理 End Sub VB .net Form_Load時、または関数内でPictureBoxにライン描画を行ないたい。 Form上にPictureBox,Buttonを配置して、Botton_Click処理時にPictureBox上へのライン描画は Dim g As Graphics = PictureBox1.CreateGraphics g.DrawLine(Pens.Red, 0, 0, 100, 200) g,Dispose() にて行なえましたが、同じような描画を Form_Load時に上記の処理を入れても全く描画されません。Button_Clickイベントのように1クッション置かないと実現できないのでしょうか? Form_Load時、関数内などで周期的にライン描画を 行なってやりたいのですが、どなたか解決方法をご存知の方がいましたら回答の程よろしくお願いいたします。 イベントプロシージャが動作しない アクセスVBAで、フォームでイベントプロシージャと指定し、該当イベントプロシージャをコーディングしてオブジェクト化しているのに、イベントプロシージャが動作しません。 何か良い解決方法がありましたら、教えていただけないでしょうか?よろしくお願いいたします。 フォームのイベントを標準モジュールから呼び出す フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。 Form1.vbをイベントなしで動作させるには? VB2005初心者で困っています。 Menu.vbとForm1.vb, Form2vb, Form3.vb・・・を作り、Menu.vbのButton1_ClickでForm1.Show()としてForm1.vbに移行し、次にForm1のButton1_clickイベントでExcelからDataを読み込んでGraphを書かせています。(この時は問題なく動作しています) これを、Form1に移行したらすぐにGraphを表示しようとして、Form1.vbの Public Class Form1 Private Sub Button_Clic(Byval sender As System・・・・・)Handles Button1.click Dim g As Graphics ・・・・ を変更して、 Private Sub Form1_Load(Byval sender As System・・・・)Handles MyBase.load Me.Show() Dim g As Graphics ・・・・ と、しましたが、一瞬Graphは表示しますが、すぐに消えます。 また、罫線はまったく表示しません。 Button_ClickイベントなしでForm1を動かすにはどうすればよいのでしょうか? 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
回答ありがとうございます。 >Form_Loadの { にブレークポイントを設定して >呼び出し履歴で確認すると グレーの文字で9行ほど手前にあります 確かにWM_SHOWWINDOWのようですね。