- 締切済み
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を動かすにはどうすればよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- K-Sogacchi
- ベストアンサー率53% (50/93)
Form1.Showで呼ばれたForm1_Load中で、Me.Show() を書いても、たぶん意味がありませんね。 (と言うか、そういう書き方をした事すら無い) Showしない状態で(.NETだとインスタンスを生成したらLoadイベントは…発生するのか? 調べたこと無いけど…)Form1_Loadが呼ばれたなら、効果あると思いますが… 問題の現象は、一度表示しようとはするものの、Form_Loadが完了した時点で Formが初期化されて、消えてるのかもしれません。 Form_Loadではなく、Form_Shownイベントで、グラフの描画を行ってみれば、 改善されるかもしれません。 なお、No.1のredfox63氏の指摘にもあるように、グラフィックスはメモリ上に Bitmapで展開してから、それを参照するのが上策です。 直接書いただけでは、他のウインドウで隠されたりした時点で、消えてしまいます。
- redfox63
- ベストアンサー率71% (1325/1856)
お作法に沿ったプログラミングをしましょう 一般的なVB.NETアプリなら 描画担当はPaintイベントが担当します 直接ControlやFormなどから Graphicsオブジェクトを構築して 描画するのは一時的な描画です 恒久的な描画をさせたいなら ImageかBitmapからGraphicsオブジェクトを作成し、描画処理を行い、GraphicsオブジェクトをDisposeしてから その元になった ImageまたはBitmapをコンテナのImageやBackgroundImageなどに設定しましょう
お礼
ありがとうございました。 もう少し勉強します。
お礼
ご回答をいただきありがとうございました。 VBは初心者のためよく解らないことがあり、色々な本の寄せ集めになっているため、変なProgramになっているかもしれません。 Form_Shownイベントは早速確かめてみましたが、やはりせっかく表示したGraphや数値がすぐに消えてしまいました。 多分、ご指摘の通りFormが初期化されて消えているのだと思います。 もう少し検討してみます。 BTMについては単純な画像の表示ではなく、DrawLineやDrawStringでExcel Dataの分析結果を表示していますが、これも間違いでしょうか?