none
MDIアプリケーションで子Formに描画する方法 RRS feed

  • 質問

  •   私は最近VB2005を始めた初心者でが、MDIのアプリケーションを作りたいと思っています。そこでまず最初に親フォームのメニューをクリックすると、子フォームのpictureboxに直線を描く簡単なプログラムの作成を試みました(コードは下記)。

      ところが、子フォームは表示されるものの直線を描画しません。どこが間違っているのかわからないので皆様のお知恵を拝借したいと思いました。どなたかアドバイスを頂ければ幸いです。よろしくお願いします。

     

    Code Snippet

    Public Class MainForm

        Private Sub DrawToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DrawToolStripMenuItem.Click
            Dim gr As Graphics
            Dim fm As New Form2()
            Dim pctBox As PictureBox

           fm.MdiParent = Me

           pctBox = fm.Controls("PictureBox2")
            gr = pctBox.CreateGraphics()

            gr.DrawLine(Pens.Red, New Point(0, 100), New Point(200, 100))

            gr.Dispose()

           pctBox.Refresh()

           fm.Show()

        End Sub
    End Class

     

    *ちなみにMDIを使わない類似コードでは正常に動作しました。

     

    2007年4月6日 13:28

すべての返信

  • Graphics オブジェクトで描画したものが、いつまで描画されているかについて理解されれば解決できると思います。

    答えは次の描画までです。

     

    このため、Form2 を表示する前に一度 PictureBox に描画しても Form2 を表示した後に再描画が行われているため、線を引いても消えてしまいます。

    いつまでも表示し続けるためには Form の Paint イベントを使用したり、OnPaint メソッドを使用したり、PictureBox に線を引いた画像を設定したりといろいろあります。

     

    詳しくはこちらを参考にされるといいと思います。

    画像ファイルを表示する

    2007年4月6日 14:15
  • ダッチ様

      早速アドバイスを頂きありがとうございました。教えていただいたHPなどを参考にして、プログラムを修正することができまそた。今回の簡単プログラムを元に、目的のプログラム作成に取り組む予定です。有難うございました。

    2007年4月7日 5:12